Пример #1
0
        protected override void HandleReceivedObject(object receivedObject, NetworkAddress inputNetworkAddress)
        {
            var cableCloudMessage = (CableCloudMessage)receivedObject;
            var input             = new NetworkAddressNodePortPair(inputNetworkAddress, cableCloudMessage.PortNumber);

            OnUpdateState($"[RECEIVED] {input.NetworkAddress}:{cableCloudMessage.PortNumber} OUT " +
                          $"{cableCloudMessage.Data.Length} BYTES");


            NetworkAddressNodePortPair output = null;

            try {
                output = LookUpLinkDictionary(input);
                cableCloudMessage.PortNumber = output.NodePortNumber;

                SendCableCloudMessage(cableCloudMessage, output.NetworkAddress);
            }
            catch (KeyNotFoundException) {
                OnUpdateState($"[NO_AVAILABLE_LINK] {input.NetworkAddress}:{cableCloudMessage.PortNumber} OUT");
            }
            catch (Exception) {
                if (output != null)
                {
                    OnUpdateState($"[CONNECTION_ERROR] {input.NetworkAddress}:{cableCloudMessage.PortNumber}");
                    DeleteConnection(output.NetworkAddress);
                }
            }
        }
        public void Equals()
        {
            var pair1 = new NetworkAddressNodePortPair(new NetworkAddress(1), 1);
            var pair2 = new NetworkAddressNodePortPair(new NetworkAddress(1), 1);

            Assert.AreEqual(pair2, pair1);
        }
        public void InsertRecord()
        {
            var pair1 = new NetworkAddressNodePortPair(new NetworkAddress(1), 1);
            var pair2 = new NetworkAddressNodePortPair(new NetworkAddress(2), 2);

            _linkDictionary.Add(pair1, pair2);

            Assert.AreEqual(pair2, _linkDictionary[pair1]);
        }
        public void GetValueByEqualObject()
        {
            var pair1 = new NetworkAddressNodePortPair(new NetworkAddress(1), 1);
            var pair2 = new NetworkAddressNodePortPair(new NetworkAddress(2), 2);
            var pair3 = new NetworkAddressNodePortPair(new NetworkAddress(1), 1);

            _linkDictionary.Add(pair1, pair2);

            Assert.AreEqual(pair2, _linkDictionary[pair3]);
        }
Пример #5
0
        public void CableCloudPassMessageTest()
        {
            var cableCloud = new CableCloud(10000);

            cableCloud.UpdateState += (sender, state) => Console.WriteLine(state);
            cableCloud.StartListening();

            var port1 = 10001;
            var port2 = 10002;
            var port3 = 10003;

            var address1 = new NetworkAddress(1);
            var address2 = new NetworkAddress(2);
            var address3 = new NetworkAddress(3);

            var output = new NetworkAddressNodePortPair(address1, 1);
            var input1 = new NetworkAddressNodePortPair(address2, 1);
            var input2 = new NetworkAddressNodePortPair(address3, 1);

            cableCloud.AddLink(input1, output);
            cableCloud.AddLink(input2, output);
            _bytesToSend = BinarySerializer.Serialize(CreateCableCloudMessage(1, 100));

            var listenerTask1 = StartTcpListener(port1, ReceiveMessage);

            ConnectToCableCloud(port1);
            var listenerTask2 = StartTcpListener(port2, SendMessage);

            ConnectToCableCloud(port2);
            var listenerTask3 = StartTcpListener(port3, SendMessage);

            ConnectToCableCloud(port3);

            Task.WaitAll(listenerTask1, listenerTask2, listenerTask3);

            for (var i = 0; i < _bytesToSend.Length; i++)
            {
                Assert.AreEqual(_bytesToSend[i], _bytesReceived[i]);
            }
        }
Пример #6
0
        public void CreateBasicNetworkTest()
        {
            var localhost = "127.0.0.1";
            var maxAtmCellsInCableCloudMessage = 100;

            var portA = 1;
            var port1 = 2;
            var port2 = 3;
            var port3 = 4;
            var port4 = 5;
            var portB = 6;

            var cableCloud = new CableCloud(10000);

            cableCloud.UpdateState += (sender, state) => Console.WriteLine("CC: " + state);
            cableCloud.StartListening();

            var signallingCloud = new SignallingCloud(20000);

            signallingCloud.UpdateState += (sender, state) => Console.WriteLine("SC: " + state);
            signallingCloud.StartListening();

            var nms = new NetworkManagementSystem(6666);

            nms.UpdateState += (sender, state) => Console.WriteLine("NMS:" + state);
            nms.StartListening();

            Thread.Sleep(1000);

            var nameServer = new NameServer(localhost, 20000);

            nameServer.UpdateState += (sender, state) => Console.WriteLine("NS " + state);
            nameServer.Initialize();

            var sspcs1 = new StepByStepPathComputationServer(
                new NetworkAddress(1),
                localhost,
                20000
                );

            sspcs1.UpdateState += (sender, state) => Console.WriteLine("SSPCS1: " + state);
            sspcs1.Initialize();

            var sspcs2 = new StepByStepPathComputationServer(
                new NetworkAddress(2),
                localhost,
                20000
                );

            sspcs2.UpdateState += (sender, state) => Console.WriteLine("SSPCS2: " + state);
            sspcs2.Initialize();

            var clientNodeA = new ClientNode(new ClientNodeModel {
                NetworkAddress = new NetworkAddress("1.1"),
                MaxAtmCellsNumberInCableCloudMessage = maxAtmCellsInCableCloudMessage,
                ClientName = "A",
                CableCloudListeningPort      = 10000,
                SignallingCloudListeningPort = 20000,
                IpAddress = localhost
            });

            //clientNodeA.OnMessageReceived += (sender, state) => Console.WriteLine(state);
            clientNodeA.UpdateState += (sender, state) => Console.WriteLine("ClientNode A: " + state);
            clientNodeA.Initialize();
            nameServer.UpdateDirectory("A", clientNodeA.NetworkAddress, new SubnetworkPointPool(clientNodeA.NetworkAddress.Append(1)));

            var clientNodeB = new ClientNode(new ClientNodeModel {
                NetworkAddress = new NetworkAddress("2.2"),
                MaxAtmCellsNumberInCableCloudMessage = maxAtmCellsInCableCloudMessage,
                ClientName = "B",
                CableCloudListeningPort      = 10000,
                SignallingCloudListeningPort = 20000,
                IpAddress = localhost
            });

            //clientNodeB.OnMessageReceived += (sender, state) => Console.WriteLine(state);
            clientNodeB.UpdateState += (sender, state) => Console.WriteLine("ClientNode B: " + state);
            clientNodeB.Initialize();
            nameServer.UpdateDirectory("B", clientNodeB.NetworkAddress, new SubnetworkPointPool(clientNodeB.NetworkAddress.Append(1)));

            var networkNode1 = new NetworkNode(new NetworkNodeModel {
                NetworkAddress = new NetworkAddress("1.2"),
                MaxAtmCellsNumberInCableCloudMessage = maxAtmCellsInCableCloudMessage,
                NumberOfPorts           = 8,
                CableCloudListeningPort = 10000,
                IpAddress = localhost,
                NetworkManagmentSystemListeningPort = 6666,
                SignallingCloudListeningPort        = 20000
            });

            networkNode1.UpdateState += (sender, state) => Console.WriteLine("NetworkNode 1.2: " + state);
            networkNode1.Initialize();

            var networkNode2 = new NetworkNode(new NetworkNodeModel {
                NetworkAddress = new NetworkAddress("2.1"),
                MaxAtmCellsNumberInCableCloudMessage = maxAtmCellsInCableCloudMessage,
                NumberOfPorts           = 8,
                CableCloudListeningPort = 10000,
                IpAddress = localhost,
                NetworkManagmentSystemListeningPort = 6666,
                SignallingCloudListeningPort        = 20000
            });

            networkNode2.UpdateState += (sender, state) => Console.WriteLine("NetworkNode 2.1: " + state);
            networkNode2.Initialize();

            Thread.Sleep(1000);

            var socketNodePortPair1 = new NetworkAddressNodePortPair(clientNodeA.NetworkAddress, portA);
            var socketNodePortPair2 = new NetworkAddressNodePortPair(networkNode1.NetworkAddress, port1);
            var socketNodePortPair3 = new NetworkAddressNodePortPair(networkNode1.NetworkAddress, port2);
            var socketNodePortPair4 = new NetworkAddressNodePortPair(networkNode2.NetworkAddress, port3);
            var socketNodePortPair5 = new NetworkAddressNodePortPair(networkNode2.NetworkAddress, port4);
            var socketNodePortPair6 = new NetworkAddressNodePortPair(clientNodeB.NetworkAddress, portB);

            cableCloud.AddLink(socketNodePortPair1, socketNodePortPair2);
            cableCloud.AddLink(socketNodePortPair3, socketNodePortPair4);
            cableCloud.AddLink(socketNodePortPair5, socketNodePortPair6);

            Thread.Sleep(1000);

            //var sb = new StringBuilder();

            //for (var i = 0; i < 5000; i++) sb.Append("0123456789");

            clientNodeA.Connect("B", 10);

            //Thread.Sleep(1000);

            //clientNodeA.SendMessage("Message", "B");

            Thread.Sleep(1000);
        }
Пример #7
0
 public void RemoveLink(NetworkAddressNodePortPair key)
 {
     _linkDictionary.Remove(key);
 }
Пример #8
0
 public void AddLink(NetworkAddressNodePortPair key, NetworkAddressNodePortPair value)
 {
     _linkDictionary.Add(key, value);
     OnUpdateState($"[ADD_LINK] {key}=>{value}");
 }
Пример #9
0
 private NetworkAddressNodePortPair LookUpLinkDictionary(NetworkAddressNodePortPair input)
 {
     return(_linkDictionary[input]);
 }
 public SubnetworkPointPool(NetworkAddressNodePortPair pair) :
     this(pair.NetworkAddress.Append(pair.NodePortNumber))
 {
 }