Example #1
0
 private void FinalizeConnection(Retranslator retranslator)
 {
     _connectedClients.Add(new ClientInfo
     {
         Address = retranslator.Address,
         Port    = retranslator.Port
     });
     Task.Run(() => StartListenForNewComponents(retranslator));
 }
Example #2
0
 private void CloseRetranslator(Retranslator retranslator)
 {
     retranslator.ReceiveClient.Close();
     retranslator.SendClient.Close();
     lock (_locker)
     {
         _retranslators.Remove(retranslator);
         _disconnectedClients.Add(new ClientInfo
         {
             Address = retranslator.Address,
             Port    = retranslator.Port
         });
     }
 }
Example #3
0
        private void StartListenForNewComponents(Retranslator retranslator)
        {
            TcpClient     receiveClient = retranslator.ReceiveClient;
            NetworkStream stream        = receiveClient.GetStream();

            try
            {
                while (IsRunning)
                {
                    ReceiveEvents(stream);
                    ReceiveComponents(stream);
                }
            }
            finally
            {
                CloseRetranslator(retranslator);
            }
        }
Example #4
0
        private void AcceptNewClient(TcpClient receiveClient)
        {
            NetworkStream receiveStream = receiveClient.GetStream();

            int          addressLength        = receiveStream.ReadByte();
            string       address              = receiveStream.ReadAsciiString(addressLength);
            short        port                 = receiveStream.ReadShort();
            Retranslator existingRetranslator = GetRetranslatorIfExistOrNull(address, port);

            if (existingRetranslator != null)
            {
                existingRetranslator.ReceiveClient = receiveClient;
                FinalizeConnection(existingRetranslator);
                return;
            }

            TcpClient     sendClient = new TcpClient(address, port);
            NetworkStream sendStream = sendClient.GetStream();

            sendStream.WriteByte((byte)_config.LocalAddress.Length);
            sendStream.WriteAsciiString(_config.LocalAddress);
            sendStream.WriteShort(_config.LocalPort);

            var newRetranslator = new Retranslator
            {
                Address       = address,
                Port          = port,
                ReceiveClient = receiveClient,
                SendClient    = sendClient
            };

            lock (_locker)
            {
                _retranslators.Add(newRetranslator);
                FinalizeConnection(newRetranslator);
            }
        }