changeset 71:1169915705ab default tip

fix TopologyNode connect
author KaitoMaeshiro <aosskaito@cr.ie.u-ryukyu.ac.jp>
date Sun, 06 Feb 2022 16:47:41 +0900
parents 0f4fa15e5bcb
children
files Test/Topology/LocalTestTopology/StartLocalTestTopology.cs Test/Topology/TreeTestTopology/StartTreeTestTopology.cs datagear/RemoteDataGearManager.cs topology/HostMessage.cs topology/manager/CheckComingHost.cs topology/manager/StartTopologyManager.cs topology/manager/TopologyManager.cs topology/node/StartTopologyNode.cs topology/node/TopologyNode.cs topology/node/TopologyNodeConnected.cs
diffstat 10 files changed, 85 insertions(+), 98 deletions(-) [+]
line wrap: on
line diff
--- a/Test/Topology/LocalTestTopology/StartLocalTestTopology.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/Test/Topology/LocalTestTopology/StartLocalTestTopology.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -1,4 +1,5 @@
 using System;
+using System.Threading;
 using Christie_net.codegear;
 using Christie_net.topology.manager;
 using Christie_net.topology.node;
@@ -28,6 +29,9 @@
 
             }
             nodeCGM.GetLocalDGM().Put("num", 0);
+            
+            Thread.Sleep(10000);
+            Console.WriteLine("TopologyManager done");
         }
     }
 }
\ No newline at end of file
--- a/Test/Topology/TreeTestTopology/StartTreeTestTopology.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/Test/Topology/TreeTestTopology/StartTreeTestTopology.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -17,18 +17,7 @@
             int topologyManagerPort = 10000;
             int topologyNodePort = 10001;
             int nodeNum = 3;
-
-            string ipaddress = "";
-            IPHostEntry ipentry = Dns.GetHostEntry(Dns.GetHostName());
- 
-            foreach (IPAddress ip in ipentry.AddressList)
-            {
-                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
-                {
-                    Console.WriteLine(ip.ToString());
-                }
-            }
-
+            
             String[] managerArg = {"--localPort", topologyManagerPort.ToString(), "--Topology", "tree"};
             TopologyManagerConfig topologyManagerConfig = new TopologyManagerConfig(managerArg);
             new StartTopologyManager(topologyManagerConfig);
@@ -40,7 +29,6 @@
                     "--localPort", (topologyNodePort + i).ToString()};
                 TopologyNodeConfig cs = new TopologyNodeConfig(nodeArg);
                 new StartTopologyNode(cs, new ChildCodeGear()).Put("maxNodeNum", topologyManagerConfig.hasChild);
-                
             }
             Thread.Sleep(10000);
             Console.WriteLine("TopologyManager done");
--- a/datagear/RemoteDataGearManager.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/datagear/RemoteDataGearManager.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Concurrent;
 using System.Net;
+using System.Net.Http;
 using System.Net.Sockets;
 using System.Threading;
 using System.Threading.Tasks;
@@ -9,10 +10,11 @@
 using Christie_net.datagear.command;
 using Christie_net.datagear.dg;
 using Christie_net.Test.Example.RemoteTake;
+using Christie_net.topology;
 
 namespace Christie_net.datagear {
 public class RemoteDataGearManager : DataGearManager {
-    private Connection connection;
+    private Connection connection = null;
     private CodeGearManager cgm;
     private bool connect = false;
     private object syncObj = new object();
@@ -21,33 +23,50 @@
         this.cgm = cgm;
         RemoteDataGearManager manager = this;
         //Task.Factory.StartNew(() => {
+        System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
         Thread thread = new Thread( () => {
+            TcpClient client;
+            HostMessage hostMessage = new HostMessage();
             do {
+                if (port == 0) {
+                    Console.WriteLine("port failure" + t);
+                    return;
+                }
                 try {
                     IPHostEntry host = Dns.GetHostEntry(address);
-                    Socket socket ;
+                    
+                    client = new TcpClient(AddressFamily.InterNetworkV6);
+                    client.Client.DualMode = true;
+
                     foreach (IPAddress ipAddress in host.AddressList) {
                         IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, port);
-                        Console.WriteLine(ipAddress + " " +address + " " + port);
-                        try
-                        {
-                            socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
+                        
+                        Console.WriteLine("try to connect " +  ipAddress + " " +address + " " + port);
+                        
+                        try {
+                            client.Connect(remoteEndPoint);
+                            client.NoDelay = true;
+                            
+                            connection = new Connection(client.Client, cgm);
+                            connection.name = dgmname;
+                            hostMessage.setHostAndPort(client.Client.LocalEndPoint.ToString(),cgm.localPort);
 
-                            socket.Connect(remoteEndPoint);
-                            socket.NoDelay = true;
+                            lock (syncObj) {
+                                connect = true;
+                                Monitor.Pulse(syncObj);
+                            }
                             
-                            connection = new Connection(socket, cgm);
-                            connection.name = dgmname;
                             break;
                         }catch{
                             
                         }
                     }
 
-                    lock (syncObj) {
-                        connect = true;
-                        Monitor.Pulse(syncObj);
+                    if (!connect) {
+                        Console.WriteLine("not connected " + host);
+                        return;
                     }
+                    
                 } catch (Exception e) {
                     Console.WriteLine(e.ToString());
                 }
@@ -66,6 +85,7 @@
             outboundThread.Name = dgmname + "-OutboundTcp";
             //outboundThread.Priority = ThreadPriority.Highest;
             outboundThread.Start();
+            cgm.GetLocalDGM().Put("hostMassage",hostMessage);
         });
 
         thread.Name = "Connect-" + dgmname;
--- a/topology/HostMessage.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/topology/HostMessage.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -1,49 +1,27 @@
 using System;
 using System.Net;
-using Christie_net.datagear.dg;
 using MessagePack;
 
 namespace Christie_net.topology{
     [MessagePackObject]
-    public class HostMessage /*: Cloneable*/ { 
+    public class HostMessage { 
         [Key("hostName")]
         private String hostName = "";
         [Key("port")]
-    private int port ;
-    [Key("nodeName")]
-    private String nodeName; // this is nodeName which have these IP and port.
-    [Key("connectionName")]
-    private String connectionName;
-    [Key("remoteNodeName")]
-    private String remoteNodeName;
-    [Key("cookie")]
-    private String cookie; // MD5
-    [Key("alive")]
-    private Boolean alive;
+        private int port ;
+        [Key("nodeName")]
+        private String nodeName; // this is nodeName which have these IP and port.
+        [Key("connectionName")]
+        private String connectionName;
+        [Key("remoteNodeName")]
+        private String remoteNodeName;
+        [Key("cookie")]
+        private String cookie; // MD5
+        [Key("alive")]
+        private Boolean alive;
 
     public HostMessage() {}
-
-    public void setLocalHostAndPort(int port){
-        
-        /*
-        //localhostからIPアドレスを取得
-        hostName = IPAddress.Loopback.ToString();
-        */
-        
-        string ipaddress = "";
-        IPHostEntry ipentry = Dns.GetHostEntry(Dns.GetHostName());
- 
-        foreach (IPAddress ip in ipentry.AddressList)
-        {
-            if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
-            {
-                hostName = ip.ToString();
-            }
-        }
-        
-        this.port = port;
-    }
-
+    
     public void setHostAndPort(HostMessage hostMessage) {
         setHostAndPort(hostMessage.getHostName(), hostMessage.getPort());
     }
@@ -87,18 +65,5 @@
                 + " cokkie = " + cookie ;
     }
 
-    /*
-    public HostMessage clone(){
-
-        HostMessage cloneHostMessage = new HostMessage();
-        try {
-            cloneHostMessage = (HostMessage)super.clone();
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return cloneHostMessage;
-    }
-    */
-    
     }
 }
\ No newline at end of file
--- a/topology/manager/CheckComingHost.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/topology/manager/CheckComingHost.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -32,6 +32,7 @@
             }
             else
             {
+                Console.WriteLine("put new host " + hostMessage.getHostName());
                 GetLocalDgm().Put("orderHash", "order");
                 GetLocalDgm().Put("newHost", hostMessage);
             }
--- a/topology/manager/StartTopologyManager.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/topology/manager/StartTopologyManager.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -1,23 +1,22 @@
-using System;
 using Christie_net.codegear;
 using Christie_net.topology.node;
 
 namespace Christie_net.topology.manager {
     
     public class StartTopologyManager : StartCodeGear {
-        public StartTopologyManager(string[] args) : this(CreateCgm(new TopologyManagerConfig(args).localPort), new TopologyManagerConfig(args)){
-        }
-        public StartTopologyManager(TopologyManagerConfig topologyManagerConfig) : this(CreateCgm(topologyManagerConfig.localPort), topologyManagerConfig){
-        }
+        public StartTopologyManager(string[] args) : 
+            this(CreateCgm(new TopologyManagerConfig(args).localPort), new TopologyManagerConfig(args)){ }
+        
+        public StartTopologyManager(TopologyManagerConfig topologyManagerConfig) : 
+            this(CreateCgm(topologyManagerConfig.localPort), topologyManagerConfig){ }
         
         public StartTopologyManager(CodeGearManager cgm, TopologyManagerConfig topologyManagerConfig) : base(cgm) {
             cgm.Setup(new TopologyManager());
             cgm.GetLocalDGM().Put("topologyManagerConfig", topologyManagerConfig);
         }
         
-        public StartTopologyManager(TopologyManagerConfig conf, CodeGear startCG) :this(CreateCgm(conf.localPort), conf, startCG){
-
-        }
+        public StartTopologyManager(TopologyManagerConfig conf, CodeGear startCG) :
+            this(CreateCgm(conf.localPort), conf, startCG){ }
 
         public StartTopologyManager(CodeGearManager cgm, TopologyManagerConfig conf, CodeGear startCG) : base(cgm) {
             cgm.Setup(new TopologyManager());
@@ -26,9 +25,7 @@
             cgm.GetLocalDGM().Put("topologyNodeConfig", conf);
 
         }
-        
-        
-        
+
         public static void Main(string[] args) {
             TopologyManagerConfig topologyManagerConfig = new TopologyManagerConfig(args);
             new StartTopologyManager(topologyManagerConfig);
--- a/topology/manager/TopologyManager.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/topology/manager/TopologyManager.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -29,7 +29,7 @@
                 }else{
                     GetLocalDgm().Put("running", false);
                     //cgm.Setup(new FileParser());
-                    cgm.Setup(new IncomingHosts());
+                    //cgm.Setup(new IncomingHosts());
                     //cgm.Setup(new ConfigWaiter());
 
                 }
--- a/topology/node/StartTopologyNode.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/topology/node/StartTopologyNode.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -9,12 +9,12 @@
     {
         public StartTopologyNode(CodeGearManager cgm, TopologyNodeConfig conf, CodeGear startCg) : base(cgm)
         {
+            cgm.Setup(new TopologyNode());
             cgm.GetLocalDGM().Put("startCG", startCg);
             cgm.GetLocalDGM().Put("topologyNodeConfig", conf);
-            cgm.Setup(new TopologyNode());
         }
 
-        public StartTopologyNode(TopologyNodeConfig conf, CodeGear startCg) : this(CreateCgm(conf.localPort), conf,
-            startCg) { }
+        public StartTopologyNode(TopologyNodeConfig conf, CodeGear startCg) : 
+            this(CreateCgm(conf.localPort), conf, startCg) { }
     }
 }
--- a/topology/node/TopologyNode.cs	Fri Feb 04 19:38:19 2022 +0900
+++ b/topology/node/TopologyNode.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -16,17 +16,8 @@
             cgm.CreateRemoteDGM(topologyNodeConfig.getManagerKey(),
                 topologyNodeConfig.getManagerHostName(),
                 topologyNodeConfig.getManagerPort());
-
-            HostMessage hostMessage = new HostMessage();
-            hostMessage.setLocalHostAndPort(cgm.localPort);
-            hostMessage.setCookie(topologyNodeConfig.cookie);
-
-            GetDgm(topologyNodeConfig.getManagerKey()).Put("hostMessage", hostMessage);
-
-            
             cgm.Setup(new IncomingConnectionInfo());
             cgm.Setup(new ConfigurationFinish());
-
         }
     }
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/topology/node/TopologyNodeConnected.cs	Sun Feb 06 16:47:41 2022 +0900
@@ -0,0 +1,21 @@
+using Christie_net.annotation;
+using Christie_net.codegear;
+
+
+namespace Christie_net.topology.node
+{
+    public class TopologyNodeConnected : CodeGear
+    {
+        [Take] public HostMessage hostMessage;
+        [Peek] public TopologyNodeConfig topologyNodeConfig;
+        
+        public TopologyNodeConnected() {
+        }
+
+        public override void Run(CodeGearManager cgm) {
+            hostMessage.setCookie(topologyNodeConfig.cookie);
+            hostMessage.setHostAndPort(hostMessage.getHostName(),cgm.localPort);
+            GetDgm(topologyNodeConfig.getManagerKey()).Put("hostMessage", hostMessage);
+        }
+    }
+}
\ No newline at end of file