Exemplo n.º 1
0
 void OpenConnectForTopology(int clientsCount, List <TopologyUnit> clients)
 {
     RunAcceptSocket(out Socket serverAcceptSocket, clientsCount, SERVER_PORT_FOR_TOPOLOGY);
     PrintMessage($"Ожидаемое число подключений: {clientsCount}");
     PrintMessage("Ожидание подключений...");
     for (int i = 0; i < clientsCount; i++)
     {
         Socket       socket    = serverAcceptSocket.Accept();
         TopologyUnit newClient = new TopologyUnit(socket);
         clients.Add(newClient);
         PrintMessage("Новое подключение.");
     }
     PrintMessage("Все узлы подключились.");
     serverAcceptSocket.Close();
 }
Exemplo n.º 2
0
        void SendData(TopologyUnit client, byte[] byteNeighbours)
        {
            try {
                client.Socket.Send(byteNeighbours);

                var clientId = client.Id.ToString();
                client.Socket.Send(Encoding.ASCII.GetBytes(clientId));
                Thread.Sleep(100);
                var clientAcceptPort = client.AcceptPort.ToString();
                client.Socket.Send(Encoding.ASCII.GetBytes(clientAcceptPort));
            }
            catch (Exception ex) {
                PrintMessage($"Соединение с клиентом (id={client.Id}) было потеряно.");
                PrintMessage(ex.Message);
            }
        }
Exemplo n.º 3
0
        List <Neighbour> GetNeighboursForClient(TopologyUnit client, List <TopologyUnit> clients)
        {
            string clientIp = client.GetIpPort();
            int    clientId = client.Id;

            PrintMessage($"Для узла {clientIp} (id = {clientId}):");
            List <Neighbour> neibs = new List <Neighbour>();

            while (true)
            {
                int?id = InputNeighbourId(clients.Count, clientId);
                if (id == null)
                {
                    break;
                }
                if (id == 0)
                {
                    string serverIp = GetIpAdress().ToString();

                    Neighbour NeibServer = new Neighbour(serverIp, 1, AcceptPort);
                    neibs.Add(NeibServer);

                    numberIncomingConnections++;

                    continue;
                }
                foreach (TopologyUnit cl in clients)
                {
                    if (cl.Id == id)
                    {
                        InputNeighbourPriority(out int priority);
                        string    ip   = cl.GetIp();
                        int       port = cl.AcceptPort;
                        Neighbour n    = new Neighbour(ip, priority, port);
                        neibs.Add(n);
                        break;
                    }
                }
            }
            return(neibs);
        }
Exemplo n.º 4
0
 void CreateClietnsList(out List <TopologyUnit> clients)
 {
     TopologyUnit.SetStartPortValue(AcceptPort);
     clients = new List <TopologyUnit>();
 }