public static void ReserveRequest(int startSlot, int neededSlots) { int[] data = { startSlot, neededSlots }; // data = GetStartAndAmountOfSlots(message); SwitchingActions.pathToCount.ReserveWindow(data[1], data[0]); XMLeon xml = new XMLeon("path" + messageData[0] + messageData[1] + SwitchingActions.pathToCount.globalID + ".xml", XMLeon.Type.nodes); // XMLeon xml = new XMLeon("path" + messageData[0] + messageData[1] + ".xml"); SwitchingActions.pathToCount.xmlName = ("path" + messageData[0] + messageData[1] + SwitchingActions.pathToCount.globalID + ".xml"); xml.CreatePathXML(SwitchingActions.pathToCount); if (Program.isTheBottonSub == true) { /* foreach (Manager nod in Program.managerNodes) * { * Console.WriteLine(nod.number); * }*/ foreach (Node node in SwitchingActions.pathToCount.nodes) { string message1 = xml.StringNode(node.number); Console.WriteLine(message1); try { Console.WriteLine(" Wezel: " + node.number); Program.managerNodes.Find(x => x.number == node.number).Send(message1); } catch { Console.Write(DateTime.Now.ToString("HH:mm:ss") + " : "); Console.WriteLine("Nie udało się wysłać ścieżki do węzła"); } } } }
/// <summary> /// gdy zdechnie wezel by od nowa zrekonfigurowac polaczenia i /// rozsyla info wezlom co byly na poprzedniej sciezce by wywlaily co maja na nia /// potem wysyla klijentowi nowe info jak ma wysylac /// i wezlom co sa na tej nowej sciezce /// </summary> /// <param name="id"></param> internal static void NodeIsDead(int id) { string message1; var toReconfigure = Program.paths.FindAll(x => x.nodes.Contains(x.nodes.Find(y => y.number == id))); foreach (Path path in toReconfigure) { path.ResetSlotReservation(); } foreach (Path path in toReconfigure) { System.Threading.Thread.Sleep(100); path.ResetSlotReservation(); message1 = "remove:" + path.nodes.Last().number + path.nodes[0].number; foreach (Node node in path.nodes) { if (node.number <= 80 && node.number != id) { lock (Program.managerNodes) { try { Program.managerNodes[node.number - 1].Send(message1); } catch { Console.Write(DateTime.Now.ToString("HH:mm:ss") + " : "); Console.WriteLine("Nie udało się automatycznie usunąć wpisów"); } } } } Path pathForFunction; lock (Program.nodes) { lock (Program.links) { pathForFunction = PathAlgorithm.dijkstra(Program.nodes, Program.links, path.nodes.Last().number, path.nodes.First().number, false); } } if (pathForFunction.pathIsSet == true) { lock (Program.paths) { try { //jezeli udalo sie zestawic nowe polaczenie to jest podmieniane Program.paths[Program.paths.FindIndex(x => x == path)] = pathForFunction; Console.Write(DateTime.Now.ToString("HH:mm:ss") + " : "); Console.WriteLine("Zamieniłem ścieżkę"); } catch { Console.Write(DateTime.Now.ToString("HH:mm:ss") + " : "); Console.WriteLine("Nie udało się zamienić ścieżki"); } } var xml = new XMLeon(path.xmlName); //rozeslanie informacji do klijenta wysylajacego o zmianie sciezki var targetClient = pathForFunction.nodes.First().number - 80; message1 = "replace:<start_slot>" + pathForFunction.startSlot + "</start_slot><target_client>" + targetClient + "</target_client>"; try { Program.managerClient[path.nodes.Last().number - 80 - 1].Send(message1); } catch (Exception ex) { Console.Write(DateTime.Now.ToString("HH:mm:ss") + " : "); Console.WriteLine("Nie udało się wysłać ścieżki do klienta, ex: " + ex.ToString()); } //koniec rozsylo do klijenta //taka indkesacja, bo bierzemy od konca i nie potrzebujemy do odbiorcy niczego wysylac for (int i = pathForFunction.nodes.Count - 1; i >= 1; i--) { if (pathForFunction.nodes[i].number < 80) { message1 = xml.StringNode(pathForFunction.nodes[i].number); Console.WriteLine(message1); try { Program.managerNodes[pathForFunction.nodes[i].number - 1].Send(message1); } catch { Console.Write(DateTime.Now.ToString("HH:mm:ss") + " : "); Console.WriteLine("Nie udało się wysłać ścieżki do węzła"); } } } } else { lock (Program.paths) { try { //jezeli nie udalo sie zestawic polaczenia to jest ono wywalane z listy polaczen Program.paths.Remove(Program.paths.Find(x => x == path)); } catch { Console.Write(DateTime.Now.ToString("HH:mm:ss") + " : "); Console.WriteLine("Nie udało się wywalić ścieżki"); } } } } }