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(); } } }
private void SetPath(Command command, Socket handler) { if (String.IsNullOrEmpty(command.startOfPath)) { self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> RC >> Trying to solve route element ({command.startOfPathPort}, {command.endOfPathPort})" + Environment.NewLine)); } else { self.mainWindow.Invoke(new Action(() => self.Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> RC >> Trying to solve route element ({command.startOfPath}, {command.endOfPath})" + Environment.NewLine)); } if (String.IsNullOrEmpty(command.startOfPath) || String.IsNullOrEmpty(command.endOfPath)) { List <NetworkNode> checkList = self.ReturnNodes(); bool flag = false; string thatNode = string.Empty; foreach (NetworkNode n in checkList) { List <int> tempInt = n.ReturnPorts(); if (tempInt.Contains(command.startOfPathPort) && tempInt.Contains(command.endOfPathPort)) { //oba porty należą do jednego OXC! nie szukamy ścieżki flag = true; thatNode = n.ReturnName(); } else { //porty z różnych oxc, więc szukamy ścieżki w podsieci } } if (!flag) { Command response = new Command("Path Ready"); List <string> temp = new List <string>(); for (int i = 0; i < links.Count; i++) { if (links[i].portObject1 == command.startOfPathPort || links[i].portObject1 == command.endOfPathPort) { temp.Add(links[i].Object1); } if (links[i].portObject2 == command.endOfPathPort || links[i].portObject2 == command.startOfPathPort) { temp.Add(links[i].Object2); } } if (temp.Count == 1) { command.startOfPath = temp[0]; response.startOfPath = temp[0]; command.endOfPath = temp[0]; response.endOfPath = temp[0]; } else { command.startOfPath = temp[0]; response.startOfPath = temp[0]; command.endOfPath = temp[1]; response.endOfPath = temp[1]; } response.startOfPathPort = command.startOfPathPort; response.endOfPathPort = command.endOfPathPort; response.linkList = getShortestPath(command.startOfPath, command.endOfPath); response.sourceId = rcId; response.destinationId = command.sourceId; response.startOfPath = command.startOfPath; response.endOfPath = command.endOfPath; response.domainOfRequestedClient = command.domainOfRequestedClient; response.domainOfRequestingClient = command.domainOfRequestingClient; response.bandwidth = command.bandwidth; response.startCrack = command.startCrack; response.endCrack = command.endCrack; using (var stream = new NetworkStream(handler)) { BinaryFormatter bformatter = new BinaryFormatter(); bformatter.Serialize(stream, response); stream.Flush(); stream.Close(); } } else { Command response = new Command("Just Confirm"); response.linkList = new List <Link>(); foreach (Link l in command.linkList) { if (l.Object1 == self.ReturnName()) { l.Object1 = thatNode; } if (l.Object2 == self.ReturnName()) { l.Object2 = thatNode; } } response.linkList.AddRange(command.linkList); response.sourceId = rcId; 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(); } } } else { Command response = new Command("Path Ready"); response.startOfPathPort = command.startOfPathPort; response.endOfPathPort = command.endOfPathPort; response.linkList = getShortestPath(command.startOfPath, command.endOfPath); response.sourceId = rcId; response.destinationId = command.sourceId; response.startOfPath = command.startOfPath; response.endOfPath = command.endOfPath; 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(); } } }