private void StartWriting()
        {
            Task.Run(async() =>
            {
                var connectionId = ConnectionId;
                try
                {
                    var writer = new StreamWriter(ActiveConnection.GetStream())
                    {
                        AutoFlush = true
                    };
                    while (IsOnline && connectionId == ConnectionId)
                    {
                        while (!WriteQueue.IsEmpty)
                        {
                            string message;
                            if (!WriteQueue.TryDequeue(out message))
                            {
                                continue;
                            }

                            Logger.Debug($"<< {message}");
                            await writer.WriteLineAsync(message);
                        }
                        await Task.Delay(10);
                    }
                }
                catch (Exception exception)
                {
                    Logger.Warn($"[WRITE] Disconnected. Reason: {exception.Message}");
                    await OnTcpClientDisconnected(connectionId);
                }
            });
        }
 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);
         }
     });
 }