Esempio n. 1
0
        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");
                    }
                }
            }
        }
Esempio n. 2
0
        /// <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");
                        }
                    }
                }
            }
        }