示例#1
0
        public static void sendTopologyInit(string ip)
        {
            NetNode.log(DateTime.Now.ToLongTimeString() + " [LRM -> RC] inittopology: " + ip, ConsoleColor.Yellow);

            RCtoLRMSignallingMessage protocol = new RCtoLRMSignallingMessage();

            protocol.State    = RCtoLRMSignallingMessage.LRM_INIT;
            protocol.NodeName = ip;
            String send_object = JMessage.Serialize(JMessage.FromValue(protocol));

            writer.Write(send_object);
        }
示例#2
0
        public static void sendDeleted(string from, int port, string to)
        {
            string toSend = port.ToString() + " " + to;

            NetNode.log(DateTime.Now.ToLongTimeString() + " [LRM -> RC] info about deletion: " + toSend, ConsoleColor.Yellow);

            RCtoLRMSignallingMessage protocol = new RCtoLRMSignallingMessage();

            protocol.State = RCtoLRMSignallingMessage.LRM_TOPOLOGY_DELETE;
            //protocol.ConnectedNodePort = port;
            protocol.ConnectedNode = to;
            String send_object = JMessage.Serialize(JMessage.FromValue(protocol));

            writer.Write(send_object);
        }
示例#3
0
        public static void sendTopologyDeallocated(int port, int no_vc3)
        {
            string to;

            LRM.connections.TryGetValue(port, out to);
            NetNode.log(DateTime.Now.ToLongTimeString() + " [LRM -> RC] topology deallocated: " + to + " " + no_vc3, ConsoleColor.Red);

            RCtoLRMSignallingMessage protocol = new RCtoLRMSignallingMessage();

            protocol.State         = RCtoLRMSignallingMessage.LRM_TOPOLOGY_DEALLOCATED;
            protocol.ConnectedNode = to;
            protocol.AllocatedSlot = no_vc3;
            String send_object = JMessage.Serialize(JMessage.FromValue(protocol));

            writer.Write(send_object);
        }
示例#4
0
        private void handleThread(Object obj)
        {
            TcpClient    client = (TcpClient)obj;
            BinaryReader reader = new BinaryReader(client.GetStream());

            writer = new BinaryWriter(client.GetStream());
            Boolean noError = true;

            while (noError)
            {
                try
                {
                    string received_data   = reader.ReadString();
                    JSON   received_object = JSON.Deserialize(received_data);
                    if (received_object.Type == typeof(RCtoLRMSignallingMessage))
                    {
                        RCtoLRMSignallingMessage lrmMsg = received_object.Value.ToObject <RCtoLRMSignallingMessage>();
                        switch (lrmMsg.State)
                        {
                        case RCtoLRMSignallingMessage.LRM_INIT:
                            identifier = lrmMsg.NodeName;
                            rc.initLRMNode(identifier);
                            socketHandler.Add(identifier, writer);
                            break;

                        case RCtoLRMSignallingMessage.LRM_TOPOLOGY_ADD:
                            rc.addTopologyElementFromLRM(identifier, lrmMsg.ConnectedNode, lrmMsg.ConnectedNodePort);
                            break;

                        case RCtoLRMSignallingMessage.LRM_TOPOLOGY_DELETE:
                            rc.deleteTopologyElementFromLRM(lrmMsg.ConnectedNode);
                            break;

                        case RCtoLRMSignallingMessage.LRM_TOPOLOGY_ALLOCATED:
                            rc.allocatedTopologyConnection(identifier, lrmMsg.ConnectedNode, lrmMsg.AllocatedSlot);
                            break;

                        case RCtoLRMSignallingMessage.LRM_TOPOLOGY_DEALLOCATED:
                            rc.deallocatedTopologyConnection(identifier, lrmMsg.ConnectedNode, lrmMsg.AllocatedSlot);
                            break;
                        }
                    }
                    else if (received_object.Type == typeof(RCtoRCSignallingMessage))
                    {
                        RCtoRCSignallingMessage rcMsg = received_object.Value.ToObject <RCtoRCSignallingMessage>();
                        if (!socketHandler.ContainsKey(rcMsg.Identifier))
                        {
                            socketHandler.Add(rcMsg.Identifier, writer);
                        }

                        switch (rcMsg.State)
                        {
                        case RCtoRCSignallingMessage.RC_FROM_SUBNETWORK_INIT:
                            if (!socketHandler.ContainsKey(rcMsg.Identifier))
                            {
                                socketHandler.Add(rcMsg.Identifier, writer);
                            }
                            break;

                        case RCtoRCSignallingMessage.COUNTED_ALL_PATHS_CONFIRM:
                            if (!rc.iAmDomain)
                            {
                                rc.lowerRcSendedConnectionsAction(rcMsg.NodeConnectionsAndWeights,
                                                                  rcMsg.AssociatedNodesInSubnetwork, rcMsg.RateToCountWeights, rcMsg.Identifier);
                            }
                            else
                            {
                                rc.startProperWeigthComputingTopBottom(rcMsg.NodeConnectionsAndWeights,
                                                                       rcMsg.AssociatedNodesInSubnetwork, rcMsg.RateToCountWeights, rcMsg.Identifier,
                                                                       rc.requestNodeFrom, rc.requestNodeTo);
                            }
                            break;

                        case RCtoRCSignallingMessage.COUNTED_ALL_PATHS_REFUSE:
                            rc.lowerRcSendedRejectAction(rcMsg.RateToCountWeights, rcMsg.Identifier);
                            break;
                        }
                    }
                    else if (received_object.Type == typeof(CCtoCCSignallingMessage))
                    {
                        CCtoCCSignallingMessage ccMsg = received_object.Value.ToObject <CCtoCCSignallingMessage>();

                        switch (ccMsg.State)
                        {
                        case CCtoCCSignallingMessage.CC_MIDDLE_INIT:
                            if (!socketHandler.ContainsKey(ccMsg.Identifier))
                            {
                                socketHandler.Add(ccMsg.Identifier, writer);
                            }
                            break;

                        case CCtoCCSignallingMessage.RE_ROUTE_QUERY:

                            cc.reRouteInit();
                            break;
                        }
                    }
                }
                catch (IOException ex)
                {
                }
            }
        }