# HG changeset patch # User KaitoMaeshiro # Date 1644133661 -32400 # Node ID 1169915705ab0dff8ddbe1f3b69a99a1ad867741 # Parent 0f4fa15e5bcb0f698483c5b91b6bb7868d7246d7 fix TopologyNode connect diff -r 0f4fa15e5bcb -r 1169915705ab Test/Topology/LocalTestTopology/StartLocalTestTopology.cs --- 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 diff -r 0f4fa15e5bcb -r 1169915705ab Test/Topology/TreeTestTopology/StartTreeTestTopology.cs --- 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"); diff -r 0f4fa15e5bcb -r 1169915705ab datagear/RemoteDataGearManager.cs --- 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; diff -r 0f4fa15e5bcb -r 1169915705ab topology/HostMessage.cs --- 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 diff -r 0f4fa15e5bcb -r 1169915705ab topology/manager/CheckComingHost.cs --- 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); } diff -r 0f4fa15e5bcb -r 1169915705ab topology/manager/StartTopologyManager.cs --- 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); diff -r 0f4fa15e5bcb -r 1169915705ab topology/manager/TopologyManager.cs --- 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()); } diff -r 0f4fa15e5bcb -r 1169915705ab topology/node/StartTopologyNode.cs --- 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) { } } } diff -r 0f4fa15e5bcb -r 1169915705ab topology/node/TopologyNode.cs --- 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 diff -r 0f4fa15e5bcb -r 1169915705ab topology/node/TopologyNodeConnected.cs --- /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