private void StartReading()
 {
     Task.Run(async() =>
     {
         var connectionId = ConnectionId;
         try
         {
             var reader = new StreamReader(ActiveConnection.GetStream());
             while (IsOnline && connectionId == ConnectionId)
             {
                 var message = await reader.ReadLineAsync();
                 if (message == null)
                 {
                     break;
                 }
                 Logger.Trace($">> {message}");
                 if (!ClientReadProxy.ProcessRequest(message).Invoked)
                 {
                     await ServerReceivedInvalidMessageAsync(InvalidMessage.For(message)).CastToTask();
                 }
             }
         }
         catch (Exception exception)
         {
             Logger.Warn($"[READ] Disconnected. Reason: {exception.Message}");
             await OnTcpClientDisconnected(connectionId);
         }
     });
 }
 public void WaitForRegistration()
 {
     Task.Run(async() =>
     {
         var reader             = new StreamReader(TcpClient.GetStream());
         var clientChannelProxy = new ChannelInvoker(this);
         var message            = await reader.ReadLineAsync();
         if (!clientChannelProxy.ProcessRequest(message).Invoked)
         {
             OnInvalidRequest(InvalidMessage.For(message));
         }
     });
 }
        public void WaitForRegistration()
        {
            Task.Run(async() =>
            {
                var reader             = new StreamReader(TcpClient.GetStream());
                var clientChannelProxy = new ChannelInvoker(this);

                string message;
                do
                {
                    message = await reader.ReadLineAsync();
                    Logger.Info(message);
                } while (!message.ToUpper().StartsWith(nameof(RegisterAsync).ToUpper()));

                if (!clientChannelProxy.ProcessRequest(message).Invoked)
                {
                    await OnInvalidRequest(InvalidMessage.For(message)).CastToTask();
                }
            });
        }