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); } }); }