예제 #1
0
        static void Main(string[] args)
        {
            Console.Title = "Subnetwork " + CustomSocket.Config.getProperty("SubnetworkAddress");
            ConnectionController CC  = new ConnectionController();
            LinkResourceManager  LRM = new LinkResourceManager();
            RoutingController    RC  = new RoutingController(CC.ContainedSubnetworksAddresses, LRM.Links);

            SubnetworkServer.init(CC, RC, LRM);
            LoadEdgeSNPPs(CC, LRM);

            string decision;

            do
            {
                decision = Console.ReadLine().Trim();
                if (decision.StartsWith("kill"))
                {
                    string[] killParams       = decision.Split(' ');
                    string   firstSNPaddress  = killParams[1];
                    string   secondSNPaddress = killParams[2];
                    CustomSocket.LogClass.MagentaLog("Removing link: " + firstSNPaddress + " - " + secondSNPaddress);

                    List <Tuple <string, string, int> > pathsToReroute = CC.GetPathsContainingThisSNP(firstSNPaddress);
                    foreach (var path in pathsToReroute)
                    {
                        CC.DeleteConnection(path.Item1, path.Item2);
                        RC.DeleteLink(firstSNPaddress, secondSNPaddress);
                        CC.ConnectionRequestFromNCC(path.Item1, path.Item2, path.Item3);
                    }
                }
                else if (decision.StartsWith("restore"))
                {
                    string[] restoreParams     = decision.Split(' ');
                    string   firstSNPPaddress  = restoreParams[1];
                    string   secondSNPPaddress = restoreParams[2];
                    RC.RestoreLink(firstSNPPaddress, secondSNPPaddress);
                }
            }while (decision != "exit");
        }
예제 #2
0
 private static void WaitForInput(CSocket connected)
 {
     if (!connected.Equals(toParentSocket))
     {
         ProcessConnectInformation(connected);
     }
     while (true)
     {
         Tuple <String, Object> received = connected.ReceiveObject();
         String parameter      = received.Item1;
         Object receivedObject = received.Item2;
         if (parameter.Equals(SNPP_SUBNETWORK_INFORMATION))
         {
             InsertSNPPSToRC((List <SNPP>)receivedObject);
         }
         else if (parameter.Equals(CONNECTION_REQUEST_FROM_NCC))
         {
             MessageParameters parameters    = (MessageParameters)receivedObject;
             String            sourceIP      = parameters.getFirstParameter();
             String            destinationIP = parameters.getSecondParameter();
             int capacity = parameters.getCapacity();
             LogClass.CyanLog("Received CONNECTION REQUEST from NCC.");
             bool    success = connectionController.ConnectionRequestFromNCC(sourceIP, destinationIP, capacity);
             String  parentSubnetworkAddress = "127.0.0.1";
             CSocket c = new CSocket(IPAddress.Parse(parentSubnetworkAddress), 40000, CSocket.CONNECT_FUNCTION);
             SendACKorNACK(success, c);
         }
         else if (parameter.Equals(PEER_COORDINATION))
         {
             Tuple <SNP, string> receivedPair = (Tuple <SNP, string>)receivedObject;
             LogClass.CyanLog("Received PEER COORDINATION from AS 1");
             bool success = connectionController.PeerCoordinationIn(receivedPair.Item1, receivedPair.Item2);
             SendACKorNACK(success, connected);
         }
         else if (parameter.Equals(DELETE_PEER_COORDINATION))
         {
             Tuple <SNP, string> receivedPair = (Tuple <SNP, string>)receivedObject;
             LogClass.CyanLog("Received DELETE PEER COORDINATION from AS 1");
             bool success = connectionController.DeletePeerCoordinationIn(receivedPair.Item1, receivedPair.Item2);
             SendACKorNACK(success, connected);
         }
         else if (parameter.Equals(NETWORK_TOPOLOGY))
         {
         }
         else if (parameter.Equals(CONNECTION_REQUEST_FROM_CC))
         {
             Tuple <SNP, SNP> pathToAssign = (Tuple <SNP, SNP>)received.Item2;
             SNP first  = pathToAssign.Item1;
             SNP second = pathToAssign.Item2;
             LogClass.CyanLog("Received CONNECTION REQUEST to set connection between " + first.Address + " and " + second.Address);
             bool response = callConnectionRequest(pathToAssign.Item1, pathToAssign.Item2);
             SendACKorNACK(response, connected);
         }
         else if (parameter.Equals(CALL_TEARDOWN))
         {
             MessageParameters parameters    = (MessageParameters)receivedObject;
             String            sourceIP      = parameters.getFirstParameter();
             String            destinationIP = parameters.getSecondParameter();
             LogClass.CyanLog("Received TEARDOWN to deallocate connection between " + sourceIP + " and " + destinationIP);
             bool    success = connectionController.DeleteConnection(sourceIP, destinationIP);
             String  parentSubnetworkAddress = "127.0.0.1";
             CSocket c = new CSocket(IPAddress.Parse(parentSubnetworkAddress), 40000, CSocket.CONNECT_FUNCTION);
             SendACKorNACK(success, c);
         }
         else if (parameter.Equals(DELETE_CONNECTION_REQUEST))
         {
             Tuple <SNP, SNP> pathToDelete = (Tuple <SNP, SNP>)received.Item2;
             string           pathBegin    = pathToDelete.Item1.Address;
             string           pathEnd      = pathToDelete.Item2.Address;
             LogClass.CyanLog("Received DELETE CONNECTION REQUEST to delete connection between " + pathBegin + " and " + pathEnd);
             bool success = connectionController.DeleteConnection(pathBegin, pathEnd);
             SendACKorNACK(success, connected);
         }
         else if (parameter.Equals(CSocket.ACK_FUNCTION))
         {
             LogClass.CyanLog("Received ACK");
             acked = true;
         }
         else if (parameter.Equals(CSocket.NACK_FUNCTION))
         {
             LogClass.CyanLog("Received NACK");
             nacked = true;
         }
     }
 }