コード例 #1
0
ファイル: Server.cs プロジェクト: ThomasBDev/Net-Change-2018
        //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();
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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();
            }
        }