Exemplo n.º 1
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)
                {
                }
            }
        }