//Deze loop regelt verbindingen? //Je kan dit niet in Program.cs stoppen, omdat een verbinding terug clientIn en clientOut nodig heeft. private void AcceptLoop(TcpListener handle) { while (true) { TcpClient client = handle.AcceptTcpClient(); StreamReader clientIn = new StreamReader(client.GetStream()); StreamWriter clientOut = new StreamWriter(client.GetStream()); clientOut.AutoFlush = true; string[] messageFromClient = clientIn.ReadLine().Split(); string command = messageFromClient[0]; int anderePoort = int.Parse(messageFromClient[1]); //Je hebt een verbinding heen en terug tussen A en B. //Als A de verbinding verbreekt, dan blijft de verbinding van B naar A intact. //Als A dan weer een verbinding naar B wil maken, dan moet er dus gecheckt worden. //Anders wil het programma een 2de verbinding van B naar A maken en dat kan niet/is niet nodig. if (Program.Buren.ContainsKey(anderePoort)) { Console.WriteLine("We hebben al een verbinding van " + Program.MijnPoort + " naar " + anderePoort); } else { Console.WriteLine("We maken een nieuwe verbinding van " + Program.MijnPoort + " naar " + anderePoort); // Zet de nieuwe verbinding in de verbindingslijst Program.Buren.Add(anderePoort, new Connection(clientIn, clientOut, anderePoort)); Program.Ndis.Add(new Tuple <int, int>(anderePoort, anderePoort), 1); Program.Du.Add(anderePoort, 1); Program.Nb.Add(anderePoort, anderePoort); //pref neighbour; (nb, destination) //NetChange.routingTable.SetRoute(anderePoort, anderePoort, 1); NetChange.Recompute(anderePoort); } Console.WriteLine(); } }
public void listenForOtherNodes() { string[] incomingMessage = Read.ReadLine().Split(); string command = incomingMessage[0]; int anderePoort = int.Parse(incomingMessage[2]); Console.WriteLine("command " + command); switch (command) { case "B": string message = incomingMessage[2]; Console.WriteLine("B bericht binnengekomen = " + command + " " + anderePoort + " " + message); break; case "C": Console.WriteLine("C bericht binnengekomen = " + command + " " + anderePoort); break; case "D": Console.WriteLine("D bericht binnengekomen = " + command + " " + anderePoort); Program.Buren.Remove(poort); Program.Du.Remove(poort); break; case "M": int destination = int.Parse(incomingMessage[3]); int newDist = int.Parse(incomingMessage[4]); Console.WriteLine("M bericht binnengekomen"); Console.WriteLine("command = " + command); Console.WriteLine("anderePoort = " + anderePoort); Console.WriteLine("destination = " + destination); Console.WriteLine("newDist = " + newDist); Console.WriteLine("OLD Ndis:"); foreach (KeyValuePair <Tuple <int, int>, int> element in Program.Ndis) { Console.WriteLine(element); } Program.Ndis[new Tuple <int, int>(anderePoort, destination)] = newDist; Console.WriteLine("NEW Ndis:"); foreach (KeyValuePair <Tuple <int, int>, int> element in Program.Ndis) { Console.WriteLine(element); } //NetChange.routingTable() NetChange.Recompute(destination); break; default: Console.WriteLine("other command = " + command); break; } }
static void Main(string[] args) { //Initialisatie. MijnPoort = int.Parse(args[0]); Console.Title = "NetChange " + args[0]; new Server(MijnPoort); Du.Add(MijnPoort, 0); Ndis.Add(new Tuple <int, int>(MijnPoort, MijnPoort), 0); Nb.Add(MijnPoort, MijnPoort); routingTable.SetRoute(MijnPoort, MijnPoort, 0); for (int t = 1; t < args.Length; t++) { int anderePoort = int.Parse(args[t]); if (MijnPoort < anderePoort) { if (!Buren.ContainsKey(anderePoort)) { while (!Buren.ContainsKey(anderePoort)) { Buren.Add(anderePoort, new Connection(anderePoort)); } Ndis.Add(new Tuple <int, int>(anderePoort, anderePoort), 1); Du.Add(anderePoort, 1); Nb.Add(anderePoort, anderePoort); //pref neighbour; (nb, destination) routingTable.SetRoute(anderePoort, anderePoort, 1); NetChange.UpdateDist(anderePoort, MijnPoort, 1); Console.WriteLine("INITIAL Verbonden: " + anderePoort); //NetChange.Recompute(anderePoort); } } } NetChange.InitMdis(); //Na de initialisatie. while (true) { listenForUserInput(); } }