// 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)); } } } } }
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; } }
public List <Subnetwork> ReturnSubnetworks() { return(mainSubnetwork.ReturnSubnetworks()); }