//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; } }