コード例 #1
0
ファイル: RC.cs プロジェクト: schabowsky/EONemulator
 private void LinkDelete(CommandLibrary.Command command, Socket handler)
 {
     links.Remove(new CommandLibrary.Link()
     {
         linkID = command.deletedLinkId
     });
 }
コード例 #2
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
 private void ConnectionConfirmed(CommandLibrary.Command command, Socket handler)
 {
     CommandLibrary.Command response = new CommandLibrary.Command("Connection confirmed");
     response.sourceId = ccId;
     response.domainOfRequestedClient  = command.domainOfRequestedClient;
     response.domainOfRequestingClient = command.domainOfRequestingClient;
     //
     response.record            = new PortMatch(0, 0, 0, 0);
     response.record.modulation = modulation;
     response.startCrack        = startCrack;
     response.endCrack          = endCrack;
     //
     response.destinationId = confirm_id;
     response.linkList      = command.linkList;
     response.bandwidth     = command.bandwidth;
     using (var stream = new NetworkStream(handler))
     {
         BinaryFormatter bformatter = new BinaryFormatter();
         bformatter.Serialize(stream, response);
         stream.Flush();
         stream.Close();
     }
     self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Connection Confirmed' sent to {response.destinationId}" + Environment.NewLine));
     modulation = string.Empty;
     startCrack = 0;
     endCrack   = 0;
 }
コード例 #3
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void GoToUpperCC(CommandLibrary.Command command, Socket handler)
        {
            CommandLibrary.Command connectionFound = new CommandLibrary.Command("Connection Found");
            connectionFound.sourceId = ccId;
            string[] splitted    = ccId.Split(':');
            string   destination = string.Empty;

            for (int i = 0; i < splitted.Length - 2; i++)
            {
                destination += splitted[i] + ":";
            }
            connectionFound.destinationId            = destination + "CC";
            connectionFound.linkList                 = command.linkList;
            connectionFound.domainOfRequestedClient  = command.domainOfRequestedClient;
            connectionFound.domainOfRequestingClient = command.domainOfRequestingClient;
            connectionFound.bandwidth                = command.bandwidth;
            Connection c = connectionList.Find(x => x.connectionId == command.connectionId);

            if (c != null)
            {
                c.usedLinks.AddRange(command.linkList);
            }

            //
            Thread.Sleep(300);
            using (var stream = new NetworkStream(handler))
            {
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, connectionFound);
                stream.Flush();
                stream.Close();
            }
            //self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + " >> CC >> Connection Found" + Environment.NewLine));
            self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Connection Confirmed' sent to {connectionFound.destinationId}" + Environment.NewLine));
        }
コード例 #4
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
 private void LinkDeleted(CommandLibrary.Command command, Socket handler)
 {
     foreach (Connection c in connectionList)
     {
         foreach (CommandLibrary.Link l in c.usedLinks)
         {
             if (l.linkID == command.deletedLinkId)
             {
                 CommandLibrary.Command response = new CommandLibrary.Command("Critical Link Deleted");
                 response.connectionId  = c.connectionId;
                 response.deletedLinkId = command.deletedLinkId;
                 if (self.ReturnSubnetworks().Count != 0)
                 {
                     string[] s = self.ReturnName().Split(':');
                     response.destinationId = s[0] + ":NCC";
                 }
                 else
                 {
                     string[] s = self.ReturnName().Split(':');
                     response.destinationId = s[0] + ":" + s[1] + ":CC";
                 }
                 using (var stream = new NetworkStream(handler))
                 {
                     BinaryFormatter bformatter = new BinaryFormatter();
                     bformatter.Serialize(stream, response);
                     stream.Flush();
                     stream.Close();
                 }
                 break;
             }
         }
     }
 }
コード例 #5
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
 private void CriticalLinkDeleted(CommandLibrary.Command command, Socket handler)
 {
     string[] s = self.ReturnName().Split(':');
     command.destinationId = s[0] + ":NCC";
     using (var stream = new NetworkStream(handler))
     {
         BinaryFormatter bformatter = new BinaryFormatter();
         bformatter.Serialize(stream, command);
         stream.Flush();
         stream.Close();
     }
 }
コード例 #6
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
 private void LinksReady(CommandLibrary.Command command, Socket handler)//używamy tego?
 {
     CommandLibrary.Command response = new CommandLibrary.Command("Connection Confirmed");
     response.sourceId                 = ccId;
     response.destinationId            = command.sourceId;
     response.domainOfRequestedClient  = command.domainOfRequestedClient;
     response.domainOfRequestingClient = command.domainOfRequestingClient;
     response.bandwidth                = command.bandwidth;
     using (var stream = new NetworkStream(handler))
     {
         BinaryFormatter bformatter = new BinaryFormatter();
         bformatter.Serialize(stream, response);
         stream.Flush();
         stream.Close();
     }
     self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Connection Confirmed' sent to {response.destinationId}" + Environment.NewLine));
 }
コード例 #7
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
 private void LinkUsage(CommandLibrary.Command command, Socket handler)
 {
     CommandLibrary.Command linkUsage = new CommandLibrary.Command("Link Usage");
     linkUsage.sourceId                 = ccId;
     linkUsage.destinationId            = self.ReturnName() + ":LRM";
     linkUsage.linkList                 = command.linkList;
     linkUsage.domainOfRequestedClient  = command.domainOfRequestedClient;
     linkUsage.domainOfRequestingClient = command.domainOfRequestingClient;
     linkUsage.bandwidth                = command.bandwidth;
     using (var stream = new NetworkStream(handler))
     {
         BinaryFormatter bformatter = new BinaryFormatter();
         bformatter.Serialize(stream, linkUsage);
         stream.Flush();
         stream.Close();
     }
     self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Links Usage Request' sent to {linkUsage.destinationId}" + Environment.NewLine));
 }
コード例 #8
0
ファイル: RC.cs プロジェクト: schabowsky/EONemulator
        private void CheckInput(CommandLibrary.Command input, Socket handler)
        {
            switch (input.commandType)
            {
            case "Set Path":
                SetPath(input, handler);
                break;

            case "Path Found":
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + " >> RC >> Calculating signal's parameteres" + Environment.NewLine));
                FindSubcarriers(input, handler);
                break;

            case "Link Delete":
                LinkDelete(input, handler);
                break;
            }
        }
コード例 #9
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void OXCCleared(CommandLibrary.Command command, Socket handler)
        {
            CommandLibrary.Command response = new CommandLibrary.Command("OXC Cleared");
            Connection             conn     = connectionList.Find(x => x.connectionId == command.connectionId);

            if (conn != null)
            {
                connectionList.Remove(conn);
            }

            response.connectionId  = command.connectionId;
            response.deletedLinkId = command.deletedLinkId;
            string[] s = self.ReturnName().Split(':');
            response.destinationId = s[0] + ":NCC";
            using (var stream = new NetworkStream(handler))
            {
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, response);
                stream.Flush();
                stream.Close();
            }
        }
コード例 #10
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void Receive(Socket handler)
        {
            NetworkStream   stream     = new NetworkStream(handler);
            BinaryFormatter bformatter = new BinaryFormatter();

            CommandLibrary.Command message = null;

            while (true)
            {
                if (stream.DataAvailable == true)
                {
                    try
                    {
                        message = (CommandLibrary.Command)bformatter.Deserialize(stream);
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine(exc);
                    }
                    CheckInput(message, handler);
                }
                Thread.Sleep(10);
            }
        }
コード例 #11
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void SetPath(CommandLibrary.Command command, Socket handler)
        {
            if (command.record != null)
            {
                if (!String.IsNullOrEmpty(command.record.modulation))
                {
                    modulation = command.record.modulation;
                    startCrack = command.startCrack;
                    endCrack   = command.endCrack;
                }
            }
            CommandLibrary.Command setPath = new CommandLibrary.Command("Set Path");
            setPath.destinationId = self.ReturnName() + ":RC";
            setPath.sourceId      = ccId;
            if (command.linkList != null)
            {
                setPath.linkList = command.linkList;
            }
            else
            {
                setPath.linkList = new List <Link>();
            }
            setPath.domainOfRequestedClient  = command.domainOfRequestedClient;
            setPath.domainOfRequestingClient = command.domainOfRequestingClient;
            setPath.bandwidth = command.bandwidth;
            if (String.IsNullOrEmpty(command.startOfPath) || String.IsNullOrEmpty(command.endOfPath))
            {
                if (command.startOfPathPort != 0 && command.endOfPathPort != 0)
                {
                    setPath.startOfPathPort = command.startOfPathPort;
                    setPath.endOfPathPort   = command.endOfPathPort;
                }
                else
                {
                    if (command.startClientId.Contains("K"))
                    {
                        string[] id = command.startClientId.Split(':');
                        setPath.startOfPath = id[1];
                    }
                    setPath.endOfPath = command.endOfPath;
                    //setPath.startOfPath = command.startClientId;

                    /*foreach (CommandLibrary.Link l in command.linkList)
                     * {
                     *  string[] temp = l.Object1.Split(':');
                     *  string[] temp2 = l.Object2.Split(':');
                     *  string[] dom = self.ReturnName().Split(':');
                     *  if (temp[0] == dom[0])
                     *  {
                     *      foreach (Subnetwork s in self.ReturnSubnetworks())
                     *      {
                     *          foreach (NetworkNode n in s.ReturnNodes())
                     *          {
                     *              List<int> tempL = n.ReturnPorts();
                     *              if (tempL.Contains(l.portObject1))
                     *              {
                     *                  setPath.endOfPath = n.ReturnName();
                     *                  l.Object1 = n.ReturnName();
                     *              }
                     *          }
                     *      }
                     *  }
                     *  else if (temp2[0] == dom[0])
                     *  {
                     *      foreach (Subnetwork s in self.ReturnSubnetworks())
                     *      {
                     *          foreach (NetworkNode n in s.ReturnNodes())
                     *          {
                     *              List<int> tempL = n.ReturnPorts();
                     *              if (tempL.Contains(l.portObject2))
                     *              {
                     *                  setPath.endOfPath = n.ReturnName();
                     *                  l.Object2 = n.ReturnName();
                     *              }
                     *          }
                     *      }
                     *  }
                     * }*/
                    setPath.linkList.Clear();
                }
            }
            else
            {
                setPath.startOfPath = command.startOfPath;
                setPath.endOfPath   = command.endOfPath;
            }
            using (var stream = new NetworkStream(handler))
            {
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, setPath);
                stream.Flush();
                stream.Close();
            }
            if (String.IsNullOrEmpty(command.startOfPath))
            {
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Route Table Query ({setPath.startOfPathPort}, {setPath.endOfPathPort})' sent to {setPath.destinationId}" + Environment.NewLine));
            }
            else
            {
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Route Table Query ({setPath.startOfPath}, {setPath.endOfPath})' sent to {setPath.destinationId}" + Environment.NewLine));
            }
        }
コード例 #12
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void NextCC(CommandLibrary.Command command, Socket handler)
        {
            destinationCC = new List <string>();
            List <int> fromCC  = new List <int>();
            List <int> whereCC = new List <int>();


            foreach (CommandLibrary.Link link in command.linkList)
            {
                if (!link.Object1.Contains("K") && !destinationCC.Contains(link.Object1) && link.Object1.Length > 1)
                {
                    destinationCC.Add(link.Object1);
                }
                if (!link.Object2.Contains("K") && !destinationCC.Contains(link.Object2) && link.Object2.Length > 1)
                {
                    destinationCC.Add(link.Object2);
                }
            }
            foreach (String dest in destinationCC)
            {
                List <CommandLibrary.Link> temp = new List <CommandLibrary.Link>();
                string destiny = "";
                foreach (CommandLibrary.Link link in command.linkList)
                {
                    if (link.Object1.Equals(dest) || link.Object2.Equals(dest))
                    {
                        temp.Add(link);
                        destiny = dest;
                    }
                }
                List <int> way = new List <int>();
                foreach (CommandLibrary.Link l in temp)
                {
                    if (l.Object1.Equals(destiny))
                    {
                        way.Add(l.portObject1);
                        continue;
                    }
                    if (l.Object2.Equals(destiny))
                    {
                        way.Add(l.portObject2);
                    }
                }
                fromCC.Add(way[0]);
                whereCC.Add(way[1]);
            }
            for (int i = 0; i < destinationCC.Count; i++)
            {
                CommandLibrary.Command send = new CommandLibrary.Command("Connection Request");
                send.sourceId                 = ccId;
                send.destinationId            = destinationCC[i] + ":CC";
                send.startOfPathPort          = fromCC[i];
                send.endOfPathPort            = whereCC[i];
                send.domainOfRequestedClient  = command.domainOfRequestedClient;
                send.domainOfRequestingClient = command.domainOfRequestingClient;
                send.bandwidth                = command.bandwidth;
                send.linkList                 = command.linkList;
                using (var stream = new NetworkStream(handler))
                {
                    BinaryFormatter bformatter = new BinaryFormatter();
                    bformatter.Serialize(stream, send);
                    stream.Flush();
                    stream.Close();
                }
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Connection Request ({send.startOfPathPort}, {send.endOfPathPort})' sent to {send.destinationId}" + Environment.NewLine));
                counter++;
            }
        }
コード例 #13
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void SetRouters(CommandLibrary.Command command, Socket handler)
        {
            List <string> destinationRouters = new List <string>();

            foreach (CommandLibrary.Link link in command.linkList)
            {
                if (!link.Object1.Contains("K") && !destinationRouters.Contains(link.Object1) && link.Object1.Contains('X') && link.Object1.Contains(self.ReturnName()))
                {
                    destinationRouters.Add(link.Object1);
                }
                if (!link.Object2.Contains("K") && !destinationRouters.Contains(link.Object2) && link.Object2.Equals('X') && link.Object2.Contains(self.ReturnName()))
                {
                    destinationRouters.Add(link.Object2);
                }
            }
            CommandLibrary.Command send = new CommandLibrary.Command("Set");
            send.bandwidth = command.bandwidth;

            int minSub = command.linkList[0].usedSlots.Min();
            int maxSub = command.linkList[0].usedSlots.Max();


            send.record = new CommandLibrary.PortMatch(0, 0, minSub, maxSub);

            send.record.modulation = command.record.modulation;

            //modulation everywhere
            foreach (string destR in destinationRouters)
            {
                send.record.routerName = destR;
                List <CommandLibrary.Link> temp = new List <CommandLibrary.Link>();
                foreach (CommandLibrary.Link link in command.linkList)
                {
                    if (link.Object1.Equals(destR) || link.Object2.Equals(destR))
                    {
                        temp.Add(link);
                    }
                }
                List <int> ports = new List <int>();;
                foreach (CommandLibrary.Link link in temp)
                {
                    if (link.Object1.Equals(destR))
                    {
                        ports.Add(link.portObject1);
                    }
                    if (link.Object2.Equals(destR))
                    {
                        ports.Add(link.portObject2);
                    }
                }
                send.sourceId                 = ccId;
                send.destinationId            = destR;
                send.record.receivedPort      = ports[0];
                send.domainOfRequestedClient  = command.domainOfRequestedClient;
                send.domainOfRequestingClient = command.domainOfRequestingClient;
                send.record.destinationPort   = ports[1];
                send.record.connectionFreq    = command.record.connectionFreq;
                using (var stream = new NetworkStream(handler))
                {
                    BinaryFormatter bformatter = new BinaryFormatter();
                    bformatter.Serialize(stream, send);
                    stream.Flush();
                    stream.Close();
                }
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> Configuration sent to {send.destinationId}" + Environment.NewLine));
            }
        }
コード例 #14
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void ClearOXC(CommandLibrary.Command command, Socket handler)
        {
            //Chciałem poprawić, a zjebałem.Trzeba tu ustalić jakas funkcje zeby po routerach rozsylala

            Connection Conn = connectionList.Find(x => x.connectionId == command.connectionId);

            if (Conn == null)
            {
                Conn = new Connection();
                Conn.connectionId = command.connectionId;
                Conn.usedLinks    = command.linkList;
            }
            //List<string> desR = new List<string>();
            //foreach (CommandLibrary.Link link in Conn.usedLinks)
            //{
            //    if (!desR.Contains(link.Object1) && link.Object1.Contains('X') && link.Object1.Contains(self.ReturnName()))
            //        desR.Add(link.Object1);
            //    if (!desR.Contains(link.Object2) && link.Object2.Contains('X') && link.Object2.Contains(self.ReturnName()))
            //        desR.Add(link.Object2);
            //}



            CommandLibrary.Command response = new CommandLibrary.Command("Link Delete");
            response.connectionId  = command.connectionId;
            response.deletedLinkId = command.deletedLinkId;
            response.destinationId = self.ReturnName() + ":RC";
            response.sourceId      = ccId;
            //
            if (Conn != null)
            {
                response.linkList = Conn.usedLinks;
            }
            using (var stream = new NetworkStream(handler))
            {
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, response);
                stream.Flush();
                stream.Close();
            }
            self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Link Delete' send to {response.destinationId}" + Environment.NewLine));

            response.commandType   = "Clear Link";
            response.destinationId = self.ReturnName() + ":LRM";

            using (var stream = new NetworkStream(handler))
            {
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, response);
                stream.Flush();
                stream.Close();
            }
            self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Link Delete' send to {response.destinationId}" + Environment.NewLine));


            if (self.ReturnSubnetworks().Count != 0)
            {
                foreach (Subnetwork s in self.ReturnSubnetworks())
                {
                    // clear oxc
                    response.commandType   = "Clear OXC";
                    response.destinationId = s.ReturnName() + ":CC";
                    using (var stream = new NetworkStream(handler))
                    {
                        BinaryFormatter bformatter = new BinaryFormatter();
                        bformatter.Serialize(stream, response);
                        stream.Flush();
                        stream.Close();
                    }
                    self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Clear OXC' send to {response.destinationId}" + Environment.NewLine));
                }
            }
            else
            {
                Thread.Sleep(200);
                List <NetworkNode> nn = self.ReturnNodes();
                foreach (NetworkNode n in nn)
                {
                    CommandLibrary.Command oxcRequest = new CommandLibrary.Command("PortMatch Delete");
                    oxcRequest.connectionId  = command.connectionId;
                    oxcRequest.deletedLinkId = command.deletedLinkId;
                    oxcRequest.destinationId = n.ReturnName();
                    if (Conn != null)
                    {
                        oxcRequest.linkList = Conn.usedLinks;
                    }
                    using (var stream = new NetworkStream(handler))
                    {
                        BinaryFormatter bformatter = new BinaryFormatter();
                        bformatter.Serialize(stream, oxcRequest);
                        stream.Flush();
                        stream.Close();
                    }



                    CommandLibrary.Command back = new CommandLibrary.Command("OXC Clear");
                    back.connectionId  = command.connectionId;
                    back.deletedLinkId = command.deletedLinkId;
                    string[] s = self.ReturnName().Split(':');
                    back.destinationId = s[0] + ":" + s[1] + ":CC";
                    using (var stream = new NetworkStream(handler))
                    {
                        BinaryFormatter bformatter = new BinaryFormatter();
                        bformatter.Serialize(stream, back);
                        stream.Flush();
                        stream.Close();
                    }
                }
            }

            if (self.ReturnSubnetworks().Count != 0)
            {
                Thread.Sleep(500);
                CommandLibrary.Command back = new CommandLibrary.Command("OXC Cleared");
                back.connectionId  = command.connectionId;
                back.deletedLinkId = command.deletedLinkId;
                back.linkList      = command.linkList;
                back.destinationId = ccId;

                using (var stream = new NetworkStream(handler))
                {
                    BinaryFormatter bformatter = new BinaryFormatter();
                    bformatter.Serialize(stream, back);
                    stream.Flush();
                    stream.Close();
                }
            }
        }
コード例 #15
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void CheckInput(CommandLibrary.Command input, Socket handler)
        {
            switch (input.commandType)
            {
            case "Connection Request":
                if (input.domainOfRequestedClient != input.domainOfRequestingClient)
                {
                    startCrack = input.startCrack;
                    endCrack   = input.endCrack;
                }
                path.Clear();
                if (self.ReturnSubnetworks().Count != 0)
                {
                    startId = input.startClientId;
                    endId   = input.endClientId;
                }
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Connection Request ({input.startClientId}, {input.endClientId})' from {input.sourceId}" + Environment.NewLine));
                SetPath(input, handler);
                confirm_id = input.sourceId;
                break;

            case "Path Ready":
                path.AddRange(input.linkList);

                Connection conn = new Connection();
                conn.connectionId = input.connectionId;
                conn.usedLinks    = new List <CommandLibrary.Link>();
                conn.usedLinks.AddRange(input.linkList);
                connectionList.Add(conn);

                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Query Solved' from {input.sourceId}" + Environment.NewLine));
                LinkUsage(input, handler);
                break;

            case "Links Ready":
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Links Usage Response' from {input.sourceId}" + Environment.NewLine));
                if (self.ReturnSubnetworks().Count == 0 || self.ReturnSubnetworks() == null)
                {
                    GoToUpperCC(input, handler);
                }
                else
                {
                    NextCC(input, handler);
                }
                break;

            case "Connection Found":
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Connection Found' from {input.sourceId}" + Environment.NewLine));
                ConfirmationFromLowerCC(input, handler);
                break;

            case "Selected Subcarriers":
                if (input.startCrack != 0)
                {
                    startCrack = input.startCrack;
                    endCrack   = input.endCrack;
                }
                else
                {
                    input.startCrack = startCrack;
                    input.endCrack   = endCrack;
                }
                modulation = input.record.modulation;
                int cracks = input.endCrack - input.startCrack + 1;
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> Signal Defined - modulation: {modulation}, subcarriers: {cracks}" + Environment.NewLine));
                //if (input.domainOfRequestedClient != input.domainOfRequestingClient)
                //{
                foreach (Link l in input.linkList)
                {
                    for (int i = startCrack; i <= endCrack; i++)
                    {
                        l.usedSlots.Add(i);
                    }
                }
                // }
                //if (input.linkList == null)
                input.linkList.AddRange(path);

                // powstana bledy w distinct LRM jak będą puste linki w path?

                MakeLRMAllocating(input, handler);

                // EmitPath(input, handler);
                // ConnectionConfirmed(input, handler);
                break;

            case "Connection Confirmed":
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Connection Confirmed' from {input.sourceId}" + Environment.NewLine));

                input.startCrack = startCrack;
                input.endCrack   = startCrack;

                ConnectionConfirmed(input, handler);     // Connection confirmed

                break;

            case "Set Routers":
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'OXC's Configuration' from {input.sourceId}" + Environment.NewLine));
                SetRouters(input, handler);
                break;

            case "Just Confirm":
                //self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> SET ROUTERS from {input.sourceId}" + Environment.NewLine));
                GoToUpperCC(input, handler);
                break;

            case "Link Deleted":
                LinkDeleted(input, handler);
                break;

            case "Critical Link Deleted":
                CriticalLinkDeleted(input, handler);
                break;

            case "Clear OXC":
                ClearOXC(input, handler);
                break;

            case "OXC Cleared":
                OXCCleared(input, handler);
                break;

            case "Slots Locked":
                EmitPath(input, handler);
                ConnectionConfirmed(input, handler);
                break;
            }
        }
コード例 #16
0
ファイル: RC.cs プロジェクト: schabowsky/EONemulator
        private void FindSubcarriers(CommandLibrary.Command command, Socket handler)
        {
            int pathLength = 0;
            IEnumerable <int> distinctSlots;
            List <int>        temp = new List <int>();

            foreach (Link l in command.linkList)
            {
                temp.AddRange(l.usedSlots);
                pathLength += l.length;
            }
            distinctSlots = temp.Distinct();

            string modulation = string.Empty;
            int    value      = 0;

            if (pathLength < 125)
            {
                modulation = "64-QAM";
                value      = 6;
            }
            else if (pathLength > 125 && pathLength <= 250)
            {
                modulation = "32-QAM";
                value      = 5;
            }
            else if (pathLength > 250 && pathLength <= 500)
            {
                modulation = "16-QAM";
                value      = 4;
            }
            else if (pathLength > 500 && pathLength <= 1000)
            {
                modulation = "8-QAM";
                value      = 3;
            }
            else if (pathLength > 1000 && pathLength <= 2000)
            {
                modulation = "QPSK";
                value      = 2;
            }
            else if (pathLength > 2000)
            {
                modulation = "BPSK";
                value      = 1;
            }
            double bauds = command.bandwidth / value;
            double band  = 2 * bauds;
            int    numberOfSubcarriers = (int)(Math.Ceiling(band / 6.25));
            //numberOfSubcarriers = numberOfSubcarriers == 0 ? 10 : numberOfSubcarriers;// ZMIENIC
            List <int> list = new List <int>();
            int        min  = 0;

            if (distinctSlots.Count() != 0)
            {
                min = distinctSlots.Max();
            }

            //foreach (Link l in command.linkList)
            //{
            //    for (int i = min + 2; i < min + 2 + numberOfSubcarriers; i++)
            //        if (!l.usedSlots.Contains(i))
            //            l.usedSlots.Add(i);
            //}
            //jak przyznać szczeliny???
            CommandLibrary.Command selectedSubcarriers = new CommandLibrary.Command("Selected Subcarriers");
            selectedSubcarriers.sourceId                 = rcId;
            selectedSubcarriers.destinationId            = command.sourceId;
            selectedSubcarriers.bandwidth                = command.bandwidth;
            selectedSubcarriers.linkList                 = command.linkList;
            selectedSubcarriers.domainOfRequestedClient  = command.domainOfRequestedClient;
            selectedSubcarriers.domainOfRequestingClient = command.domainOfRequestingClient;
            selectedSubcarriers.record            = new PortMatch(0, 0, min, min + numberOfSubcarriers);
            selectedSubcarriers.record.modulation = modulation;
            selectedSubcarriers.startCrack        = min + 2;
            selectedSubcarriers.endCrack          = selectedSubcarriers.startCrack + numberOfSubcarriers - 1;
            using (var stream = new NetworkStream(handler))
            {
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, selectedSubcarriers);
                stream.Flush();
                stream.Close();
            }
        }
コード例 #17
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
 private void ConfirmationFromLowerCC(CommandLibrary.Command command, Socket handler)
 {
     counter--;
     foreach (CommandLibrary.Link l in command.linkList)
     {
         if (!path.Contains(l))
         {
             path.Add(l);
         }
     }
     if (counter == 0)
     {
         //dodajemy połączenie
         //Connection conn = new Connection();
         //conn.connectionId = command.connectionId;
         //conn.usedLinks = command.linkList;
         //connectionList.Add(conn);
         //
         Connection c = connectionList.Find(x => x.connectionId == command.connectionId);
         if (c != null)
         {
             c.usedLinks.AddRange(command.linkList);
         }
         if (!String.IsNullOrEmpty(modulation) && endCrack != 0)
         {
             CommandLibrary.Command selectedSubcarriers = new CommandLibrary.Command("Selected Subcarriers");
             selectedSubcarriers.sourceId                 = "";
             selectedSubcarriers.destinationId            = self.ReturnName() + ":CC";
             selectedSubcarriers.bandwidth                = command.bandwidth;
             selectedSubcarriers.linkList                 = command.linkList;
             selectedSubcarriers.domainOfRequestedClient  = command.domainOfRequestedClient;
             selectedSubcarriers.domainOfRequestingClient = command.domainOfRequestingClient;
             selectedSubcarriers.record            = new PortMatch(0, 0, startCrack, startCrack + endCrack);
             selectedSubcarriers.record.modulation = modulation;
             selectedSubcarriers.startCrack        = startCrack;
             selectedSubcarriers.endCrack          = endCrack;
             using (var stream = new NetworkStream(handler))
             {
                 BinaryFormatter bformatter = new BinaryFormatter();
                 bformatter.Serialize(stream, selectedSubcarriers);
                 stream.Flush();
                 stream.Close();
             }
             startCrack = 0;
             endCrack   = 0;
             modulation = string.Empty;
         }
         else
         {
             CommandLibrary.Command pathFound = new CommandLibrary.Command("Path Found");
             pathFound.sourceId                 = ccId;
             pathFound.destinationId            = self.ReturnName() + ":RC";
             pathFound.linkList                 = path;
             pathFound.domainOfRequestedClient  = command.domainOfRequestedClient;
             pathFound.domainOfRequestingClient = command.domainOfRequestingClient;
             pathFound.bandwidth                = command.bandwidth;
             using (var stream = new NetworkStream(handler))
             {
                 BinaryFormatter bformatter = new BinaryFormatter();
                 bformatter.Serialize(stream, pathFound);
                 stream.Flush();
                 stream.Close();
             }
             self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> Full Path Found" + Environment.NewLine));
             self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >> 'Signal Parameters Request' sent to {pathFound.destinationId}" + Environment.NewLine));
         }
         counter = 0;
     }
 }
コード例 #18
0
ファイル: CC.cs プロジェクト: schabowsky/EONemulator
        private void EmitPath(CommandLibrary.Command command, Socket handler)
        {
            foreach (CommandLibrary.Link link in command.linkList)
            {
                foreach (Subnetwork s in self.ReturnSubnetworks())
                {
                    foreach (NetworkNode n in s.ReturnNodes())
                    {
                        List <int> temp = n.ReturnPorts();
                        if (temp.Contains(link.portObject1))
                        {
                            link.Object1 = n.ReturnName();
                        }
                        else if (temp.Contains(link.portObject2))
                        {
                            link.Object2 = n.ReturnName();
                        }
                    }
                }
            }

            for (int i = 0; i < destinationCC.Count; i++)
            {
                List <CommandLibrary.Link> destLinkList = new List <CommandLibrary.Link>();
                foreach (CommandLibrary.Link link in command.linkList)
                {
                    if ((link.Object1.Contains(destinationCC[i]) && link.Object1.Contains('X')) || (link.Object2.Contains(destinationCC[i]) && link.Object2.Contains('X')))
                    {
                        destLinkList.Add(link);
                    }
                }
                CommandLibrary.Command send = new CommandLibrary.Command("Set Routers");
                send.sourceId                 = ccId;
                send.destinationId            = destinationCC[i] + ":CC";
                send.bandwidth                = command.bandwidth;
                send.linkList                 = destLinkList;
                send.domainOfRequestedClient  = command.domainOfRequestedClient;
                send.domainOfRequestingClient = command.domainOfRequestingClient;
                send.record = command.record;


                if ((endId.Contains("K1") && startId.Contains("K2")) || (endId.Contains("K2") && startId.Contains("K1")))
                {
                    send.record.connectionFreq = 235.3;
                }
                else if ((endId.Contains("K1") && startId.Contains("K3")) || (endId.Contains("K3") && startId.Contains("K1")))
                {
                    send.record.connectionFreq = 236.3;
                }
                else if ((endId.Contains("K3") && startId.Contains("K2")) || (endId.Contains("K2") && startId.Contains("K3")))
                {
                    send.record.connectionFreq = 234.3;
                }

                using (var stream = new NetworkStream(handler))
                {
                    BinaryFormatter bformatter = new BinaryFormatter();
                    bformatter.Serialize(stream, send);
                    stream.Flush();
                    stream.Close();
                }
                self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> CC >>  New configuration sent to {send.destinationId}" + Environment.NewLine));
                //counter++;
            }
        }