// LRM odbiera tablice linków, linki mają mieć wypełnione ID i sloty

        private void LinkSlotsLock(CommandLibrary.Command command, Socket handler)
        {
            List <int> distinctID = new List <int>();
            List <CommandLibrary.Link> distinctLink = new List <CommandLibrary.Link>();
            string linkString = "";

            foreach (CommandLibrary.Link l in command.linkList)
            {
                if (!distinctID.Contains(l.linkID))
                {
                    distinctLink.Add(l);
                    distinctID.Add(l.linkID);
                }
            }

            if (distinctLink.Count() != 0)
            {
                if (distinctLink[0].usedSlots.Count() != 0)

                {
                    int min = distinctLink[0].usedSlots.Min();
                    int max = distinctLink[0].usedSlots.Max();

                    foreach (CommandLibrary.Link l in linkList)
                    {
                        foreach (CommandLibrary.Link ll in distinctLink)
                        {
                            if (l.linkID == ll.linkID)
                            {
                                linkString += l.linkID.ToString() + "  ";

                                foreach (int k in ll.usedSlots)
                                {
                                    if (!(l.usedSlots.Contains(k)))
                                    {
                                        l.usedSlots.Add(k);
                                    }
                                    else
                                    {
                                        //    Console.WriteLine("proba nadpisania slotow w " + LRMName);
                                    }
                                }
                            }
                        }
                    }

                    self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> LRM >> Subcarrier slots locked from " + min + " to " + max + " in links  " + linkString + Environment.NewLine));


                    if (self.ReturnSubnetworks() == null || self.ReturnSubnetworks().Count == 0)
                    {
                        command.commandType   = "Slots Locked";
                        command.destinationId = command.sourceId;
                        command.sourceId      = LRMName;

                        using (var stream = new NetworkStream(handler))
                        {
                            BinaryFormatter bformatter = new BinaryFormatter();
                            bformatter.Serialize(stream, command);
                            stream.Flush();
                            stream.Close();
                        }

                        //self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> LRM >> SLOTS LOCKED sent to {command.destinationId}" + Environment.NewLine));
                    }
                    else
                    {
                        foreach (Subnetwork s in self.ReturnSubnetworks())
                        {
                            command.destinationId = s.ReturnName() + ":LRM";
                            command.sourceId      = LRMName;
                            using (var stream = new NetworkStream(handler))
                            {
                                BinaryFormatter bformatter = new BinaryFormatter();
                                bformatter.Serialize(stream, command);
                                stream.Flush();
                                stream.Close();
                            }
                            // self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> LRM >> LINK SLOTS LOCK sent to {command.destinationId}" + Environment.NewLine));
                        }
                    }
                }
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
 public List <Subnetwork> ReturnSubnetworks()
 {
     return(mainSubnetwork.ReturnSubnetworks());
 }