public Topology() { network = new Siec(); potentialLinks = new List <Lacze>(); eonTable = new List <EONTable>(); pathsCopy = new List <NetworkPath>(); }
public void testWyznaczSciezke() { Siec network = new Siec(); Wezel w1 = new Wezel(1, "127.0.0.1"); Wezel w2 = new Wezel(2, "127.0.0.2"); Wezel w3 = new Wezel(3, "127.0.0.3"); network.wezly.Add(w1); network.wezly.Add(w2); network.wezly.Add(w3); network.krawedzie.Add(new Lacze(12, w1, w2)); network.krawedzie.Add(new Lacze(23, w2, w3)); short band = 5; short frequency = 6; Sciezka path = new Sciezka(w1, w3); network.algorytmFloyda(); path.wyznaczSciezke(w1, w2, band, frequency, network); Assert.AreNotEqual(0, path.WezlySciezki.Count); Assert.AreNotEqual(0, path.KrawedzieSciezki.Count); Assert.AreEqual(w1.ip, path.WezlySciezki[0].ip); Assert.AreEqual(w2.ip, path.WezlySciezki[1].ip); Assert.AreEqual(w3.ip, path.WezlySciezki[2].ip); }
private void CreateBTN_Click(object sender, RoutedEventArgs e) { string text = Struktura.Text; string[] textSplit = text.Split(' '); List <int> struktura = new List <int>(); for (int i = 0; i < (textSplit.Length); i++) { struktura.Add(int.Parse(textSplit[i])); } Siec nowaSiec = new Siec(struktura); siec = nowaSiec; }
public Form1() { siec = new Siec(200,200); InitializeComponent(); pictureBox1.BackgroundImage = new Bitmap(siec.AktualnaMapa(), new Size(pictureBox1.Width, pictureBox1.Height)); List<Color> kolory = new List<Color>(); kolory.Add(Color.Red); kolory.Add(Color.Yellow); kolory.Add(Color.Blue); kolory.Add(Color.Orange); kolory.Add(Color.Pink); kolory.Add(Color.Gray); kolory.Add(Color.Green); siec.Start(kolory, 1000); }
public void setUpValues2(short band) { network = new Siec(); nodes = new List <Wezel>(); ips = new List <IPAddress>(); links = new List <Lacze>(); topology = new Topology(); ips.Add(IPAddress.Parse("127.0.0.2")); ips.Add(IPAddress.Parse("127.0.0.31")); ips.Add(IPAddress.Parse("127.0.0.17")); ips.Add(IPAddress.Parse("127.0.0.4")); ips.Add(IPAddress.Parse("127.0.0.33")); ips.Add(IPAddress.Parse("127.0.0.15")); ips.Add(IPAddress.Parse("127.0.0.6")); nodes.Add(new Wezel(2, "127.0.0.2")); nodes.Add(new Wezel(31, "127.0.0.31")); nodes.Add(new Wezel(17, "127.0.0.17")); nodes.Add(new Wezel(4, "127.0.0.4")); nodes.Add(new Wezel(33, "127.0.0.33")); nodes.Add(new Wezel(15, "127.0.0.15")); nodes.Add(new Wezel(6, "127.0.0.6")); //Dodawanie krawedzi links.Add(new Lacze(0, nodes[0], nodes[1], band)); //2-31 links.Add(new Lacze(1, nodes[1], nodes[2], band)); //31-17 links.Add(new Lacze(2, nodes[2], nodes[3], band)); //17-4 links.Add(new Lacze(3, nodes[2], nodes[4], band)); //17-33 links.Add(new Lacze(4, nodes[2], nodes[5], band)); //17-15 links.Add(new Lacze(5, nodes[4], nodes[5], band)); //33-15 links.Add(new Lacze(6, nodes[5], nodes[6], band)); //15-6 links.Add(new Lacze(7, nodes[1], nodes[0], band)); //31-2 links.Add(new Lacze(8, nodes[2], nodes[1], band)); //17-31 links.Add(new Lacze(9, nodes[3], nodes[2], band)); //4-17 links.Add(new Lacze(10, nodes[4], nodes[2], band)); //33-17 links.Add(new Lacze(11, nodes[5], nodes[2], band)); //15-17 links.Add(new Lacze(12, nodes[5], nodes[4], band)); //15-33 links.Add(new Lacze(13, nodes[6], nodes[5], band)); //6-15 network.krawedzie = new List <Lacze>(links); network.wezly = new List <Wezel>(nodes); topology.network = new Siec(network); }
public void testRoutePathsInNetwork() { Siec network = new Siec(); List <Wezel> nodes = new List <Wezel>(); List <IPAddress> ips = new List <IPAddress>(); List <Lacze> links = new List <Lacze>(); ips.Add(IPAddress.Parse("127.0.0.2")); ips.Add(IPAddress.Parse("127.0.0.31")); ips.Add(IPAddress.Parse("127.0.0.17")); ips.Add(IPAddress.Parse("127.0.0.4")); ips.Add(IPAddress.Parse("127.0.0.33")); ips.Add(IPAddress.Parse("127.0.0.15")); ips.Add(IPAddress.Parse("127.0.0.6")); nodes.Add(new Wezel(2, "127.0.0.2")); nodes.Add(new Wezel(31, "127.0.0.31")); nodes.Add(new Wezel(17, "127.0.0.17")); nodes.Add(new Wezel(4, "127.0.0.4")); nodes.Add(new Wezel(33, "127.0.0.33")); nodes.Add(new Wezel(15, "127.0.0.15")); nodes.Add(new Wezel(6, "127.0.0.6")); //Dodawanie krawedzi links.Add(new Lacze(0, nodes[0], nodes[1], 1, 0)); //2-31 links.Add(new Lacze(1, nodes[1], nodes[2], 1, 0)); //31-17 links.Add(new Lacze(2, nodes[2], nodes[3], 1, 0)); //17-4 links.Add(new Lacze(3, nodes[2], nodes[4], 1, 0)); //17-33 links.Add(new Lacze(4, nodes[2], nodes[5], 1, 0)); //17-15 links.Add(new Lacze(5, nodes[4], nodes[5], 1, 0)); //33-15 links.Add(new Lacze(6, nodes[5], nodes[6], 1, 0)); //15-6 links.Add(new Lacze(7, nodes[1], nodes[0], 1, 0)); //31-2 links.Add(new Lacze(8, nodes[2], nodes[1], 1, 0)); //17-31 links.Add(new Lacze(9, nodes[3], nodes[2], 1, 0)); //4-17 links.Add(new Lacze(10, nodes[4], nodes[2], 1, 0)); //33-17 links.Add(new Lacze(11, nodes[5], nodes[2], 1, 0)); //15-17 links.Add(new Lacze(12, nodes[5], nodes[4], 1, 0)); //15-33 links.Add(new Lacze(13, nodes[6], nodes[5], 1, 0)); //6-15 //DOdanie wszystkich krawedzi do sieci network.krawedzie.AddRange(links); //Dodanie wszystkich wezlow do sieci network.wezly.AddRange(nodes); //zapuszczenie algorytmu floyda network.algorytmFloyda(); //elementy sieci nie powinny byc zerowe Assert.IsFalse(network.Koszty.Length == 0); Assert.IsFalse(network.wezly.Count == 0); Assert.AreEqual(network.wezly.Count * network.wezly.Count, network.Koszty.Length); Assert.IsFalse(network.krawedzie.Count == 0); Assert.IsTrue(network.sprawdzSpojnosc()); Sciezka path2_6 = new Sciezka(nodes[0], nodes[6]); path2_6.wyznaczSciezke(path2_6.Wezel1, path2_6.Wezel2, network.zwrocTabliceKierowaniaLaczami, network.zwrocTabliceKierowaniaWezlami, ref network.wezly, 1, network.Koszty, 1); path2_6.wyznaczWezly(path2_6.Wezel1); path2_6.pokazSciezke(); Assert.IsTrue(path2_6.WezlySciezki.Contains(nodes[0])); Assert.IsTrue(path2_6.WezlySciezki.Contains(nodes[1])); Assert.IsTrue(path2_6.WezlySciezki.Contains(nodes[2])); Assert.IsTrue(path2_6.WezlySciezki.Contains(nodes[5])); Assert.IsTrue(path2_6.WezlySciezki.Contains(nodes[6])); //Wyswietlenie tablic Floydowych //network.tabliceFloyd(network.zwrocTabliceKierowaniaLaczami, network.zwrocTabliceKierowaniaWezlami, network.Koszty); }
public void testTables1() { Siec network = new Siec(); List <Wezel> nodes = new List <Wezel>(); List <IPAddress> ips = new List <IPAddress>(); List <Lacze> links = new List <Lacze>(); ips.Add(IPAddress.Parse("127.0.0.1")); ips.Add(IPAddress.Parse("127.0.0.2")); ips.Add(IPAddress.Parse("127.0.0.3")); ips.Add(IPAddress.Parse("127.0.0.4")); ips.Add(IPAddress.Parse("127.0.0.5")); ips.Add(IPAddress.Parse("127.0.0.6")); ips.Add(IPAddress.Parse("127.0.0.7")); //Tworzenie wezlow o id odpowiadajacych adresom IP z listy for (int i = 0; i < ips.Count; i++) { nodes.Add(new Wezel(i + 1, ips[i].ToString())); } //Dodawanie krawedzi links.Add(new Lacze(0, nodes[0], nodes[3], 1)); links.Add(new Lacze(1, nodes[3], nodes[6], 1)); links.Add(new Lacze(2, nodes[6], nodes[2], 1)); links.Add(new Lacze(3, nodes[2], nodes[1], 1)); links.Add(new Lacze(4, nodes[3], nodes[4], 1)); links.Add(new Lacze(5, nodes[4], nodes[5], 1)); links.Add(new Lacze(6, nodes[5], nodes[3], 1)); links.Add(new Lacze(7, nodes[3], nodes[0], 1)); links.Add(new Lacze(8, nodes[1], nodes[3], 1)); //DOdanie wszystkich krawedzi do sieci network.krawedzie.AddRange(links); //Dodanie wszystkich wezlow do sieci network.wezly.AddRange(nodes); //zapuszczenie algorytmu floyda network.algorytmFloyda(); //elementy sieci nie powinny byc zerowe Assert.IsFalse(network.Koszty.Length == 0); Assert.IsFalse(network.wezly.Count == 0); Assert.AreEqual(network.wezly.Count * network.wezly.Count, network.Koszty.Length); Assert.IsFalse(network.krawedzie.Count == 0); Assert.IsTrue(network.sprawdzSpojnosc()); /* * Assert.AreEqual(4, network.zwrocTabliceKierowaniaWezlami[0, 3].idWezla); * Assert.AreEqual(7, network.zwrocTabliceKierowaniaWezlami[3, 2].idWezla); * Assert.AreEqual(7, network.zwrocTabliceKierowaniaWezlami[3, 1].idWezla); * Assert.AreEqual(4, network.zwrocTabliceKierowaniaWezlami[0, 6].idWezla); * Assert.AreEqual(4, network.zwrocTabliceKierowaniaWezlami[0, 2].idWezla); * Assert.AreEqual(4, network.zwrocTabliceKierowaniaWezlami[0, 1].idWezla); * Assert.AreEqual(4, network.zwrocTabliceKierowaniaWezlami[0, 4].idWezla); * Assert.AreEqual(4, network.zwrocTabliceKierowaniaWezlami[0, 5].idWezla); * Assert.AreEqual(5, network.zwrocTabliceKierowaniaWezlami[3, 5].idWezla); * Assert.AreEqual(6, network.zwrocTabliceKierowaniaWezlami[4, 5].idWezla); */ Sciezka path1_2 = new Sciezka(nodes[0], nodes[1]); path1_2.KrawedzieSciezki = path1_2.wyznaczSciezke(path1_2.Wezel1, path1_2.Wezel2, network.zwrocTabliceKierowaniaLaczami, network.zwrocTabliceKierowaniaWezlami, ref network.wezly, 1, network.Koszty, 10); path1_2.wyznaczWezly(path1_2.Wezel1); path1_2.pokazSciezke(); Assert.IsTrue(path1_2.WezlySciezki.Contains(nodes[0])); Assert.IsTrue(path1_2.WezlySciezki.Contains(nodes[3])); Assert.IsTrue(path1_2.WezlySciezki.Contains(nodes[6])); Assert.IsTrue(path1_2.WezlySciezki.Contains(nodes[2])); Assert.IsTrue(path1_2.WezlySciezki.Contains(nodes[1])); //Wyswietlenie tablic Floydowych //network.tabliceFloyd(network.zwrocTabliceKierowaniaLaczami, network.zwrocTabliceKierowaniaWezlami, network.Koszty); }
public NetworkPath getNetworkPath(SubNetworkPointPool beginningNetworkPointPool, SubNetworkPointPool endNetworkPointPool, short band, Siec network, short frequency) { //Zamiana adresow IP na inty int beginID = ipToInt(beginningNetworkPointPool.snps[0].ipaddress); int endID = ipToInt(endNetworkPointPool.snps[0].ipaddress); //Tworzenie wezlow Wezel beginNode = this.network.wezly.Find(x => x.SNPP == beginningNetworkPointPool); // new Wezel(beginID, beginID, beginID, beginningNetworkPointPool.snps[0].ipaddress.ToString()); Wezel endNode = this.network.wezly.Find(x => x.SNPP == endNetworkPointPool); //new Wezel(endID, endID, endID, endNetworkPointPool.snps[0].ipaddress.ToString()); //Wyszukiwanie sciezki Sciezka path = new Sciezka(); //path.wyznaczSciezke(beginNode, endNode, network.zwrocTabliceKierowaniaLaczami, //network.zwrocTabliceKierowaniaWezlami, ref network.wezly, band, network.Koszty, frequency); path.wyznaczSciezke(beginNode, endNode, band, frequency, network); //Gdy sciezki w networki nie ma, to nie da sie ustanowic polaczenia if (path.KrawedzieSciezki.Count != 0) { //Nowy obiekt klasy NetworkPath ze ścieżką "path" NetworkPath networkPath = new NetworkPath(path); //Dodawanie do dodanych sciezek this.pathsCopy.Add(networkPath); network.sciezki.Add(path); return(networkPath); } //Sciezka jest pusta else { return(null); } //network.zwroc_sciezki.Find((x) => x.Wezel1 == beginNode && x.Wezel2 == endNode));network.zwroc_sciezki.Find((x) => x.Wezel1 == beginNode && x.Wezel2 == endNode); }
public List <SubNetworkPointPool> getPathOfSNPPs(SubNetworkPointPool beginningNetworkPointPool, SubNetworkPointPool endNetworkPointPool, short band, Siec network) { //Zamiana adresow IP na inty int beginID = ipToInt(beginningNetworkPointPool.snps[0].ipaddress); int endID = ipToInt(endNetworkPointPool.snps[0].ipaddress); //Tworzenie wezlow Wezel beginNode = new Wezel(beginID, beginID, beginID, beginningNetworkPointPool.snps[0].ipaddress.ToString()); Wezel endNode = new Wezel(endID, endID, endID, endNetworkPointPool.snps[0].ipaddress.ToString()); //Wyszukiwanie sciezki Sciezka path = new Sciezka(); path.wyznaczSciezke(beginNode, endNode, network.zwrocTabliceKierowaniaLaczami, network.zwrocTabliceKierowaniaWezlami, ref network.wezly, band, network.Koszty); if (path.KrawedzieSciezki.Count != 0) { network.sciezki.Add(path); } //network.zwroc_sciezki.Find((x) => x.Wezel1 == beginNode && x.Wezel2 == endNode));network.zwroc_sciezki.Find((x) => x.Wezel1 == beginNode && x.Wezel2 == endNode); //Gdy sciezki w networki nie ma, to nie da sie ustanowic polaczenia if (path == null) { return(null); } else { List <SubNetworkPointPool> SNPPs = new List <SubNetworkPointPool>(); foreach (Wezel w in path.WezlySciezki) { SubNetworkPoint snp = new SubNetworkPoint(IPAddress.Parse(w.ip)); SubNetworkPointPool snpp = new SubNetworkPointPool(); snpp.Add(snp); SNPPs.Add(snpp); } //Zwracanie listy SNPPów, gdzie kazdy z nich zawiera po jednym SNP. return(SNPPs); } }
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); }