Exemplo n.º 1
0
 public void addLink(Lacze l)
 {
     network.krawedzie.Add(l);
     network.aktualizujLiczniki();
     EONTable e = new EONTable();
 }
Exemplo n.º 2
0
        public List <SubNetworkPointPool> routePath(SubNetworkPointPool beginningNetworkPointPool,
                                                    SubNetworkPointPool endNetworkPointPool, short band)
        {
            var path = getPathOfSNPPs(beginningNetworkPointPool, endNetworkPointPool, band);

            //0 w ścieżce oznacza, że nie da się zestawić połączenia
            if (path.Count == 0)
            {
                //Skopiowanie sieci
                var newNetwork = new Siec(network);

                newNetwork.krawedzie = newNetwork.krawedzie.OrderByDescending(o => o.Waga).ToList();

                for (int i = 0; i < newNetwork.krawedzie.Count; i++)
                {
                    Wezel W1 = new Wezel(newNetwork.krawedzie[i].Wezel1.idWezla, newNetwork.krawedzie[i].Wezel1.idWezla,
                                         newNetwork.krawedzie[i].Wezel1.idWezla, newNetwork.krawedzie[i].Wezel1.ip);
                    Wezel W2 = new Wezel(newNetwork.krawedzie[i].Wezel2.idWezla, newNetwork.krawedzie[i].Wezel2.idWezla,
                                         newNetwork.krawedzie[i].Wezel2.idWezla, newNetwork.krawedzie[i].Wezel2.ip);

                    Lacze potentialLink = potentialLinks.Find(x => x.Wezel1.idWezla == W1.idWezla && x.Wezel2.idWezla == W2.idWezla &&
                                                              x.Wezel1.ip == W1.ip && x.Wezel2.ip == W2.ip);

                    //udalo sie znalezc lacze
                    if (potentialLink != null)
                    {
                        //Wstawiamy nowe łącze na koniec listy
                        potentialLink.idKrawedzi = newNetwork.krawedzie.Count;
                        newNetwork.krawedzie.Add(potentialLink);
                        newNetwork.aktualizujLiczniki();

                        //Po wstawieniu nowego łącza do eksperymentalnej sieci, zapuszaczamy algorytm Floyda
                        newNetwork.algorytmFloyda();

                        path = getPathOfSNPPs(beginningNetworkPointPool, endNetworkPointPool, band);

                        //nie udało się
                        if (path.Count == 0)
                        {
                            continue;
                        }
                        //udało się, dzięki wstawieniu krawędzi z potencjalnej udało się stworzyć ścieżkę
                        else
                        {
                            //Pierwszy wezel sciezki
                            Wezel beginNode = newNetwork.wezly.Find(x => x.ip == path[0].snps[0].ipaddress.ToString());
                            //Ostatni wezel sciezki
                            Wezel endNode = newNetwork.wezly.Find(x => x.ip == path[path.Count - 1].snps[0].ipaddress.ToString());

                            //Wyznaczamy sciezke jeszcze raz, by uzyskac liste laczy
                            var links = new Sciezka().wyznaczSciezke(beginNode, endNode, newNetwork.zwrocTabliceKierowaniaLaczami,
                                                                     newNetwork.zwrocTabliceKierowaniaWezlami, ref newNetwork.wezly, band, newNetwork.Koszty);

                            foreach (Lacze link in links)
                            {
                                //Jeżeli danej krawędzi z wyznaczonej ścieżki nie ma w wyjściowej topologii, trzeba ją dodać do tej topologii
                                if (!network.zwroc_lacza.Contains(link))
                                {
                                    network.krawedzie.Add(link);
                                    //jeszcze zmiana id krawedzi na jej indeks
                                    link.idKrawedzi = network.krawedzie.Count - 1;
                                    //Lacze juz nie jest potencjalne, lecz rzeczywiste
                                    this.potentialLinks.Remove(link);
                                }
                            }

                            return(path);
                        }
                    }
                }

                //Zwrocenie pustej listy, gdy nic sie nie udalo zrobic
                return(new List <SubNetworkPointPool>());
            }
            //A jak Count != 0, to mozna zwrocic sceizke
            else
            {
                return(path);
            }
            return(null);
        }