private async Task ListenConnectionAsync() { try { TcpClient client = await this.Listener.AcceptTcpClientAsync(); TCPSocketClientState state = new TCPSocketClientState(client); #pragma warning disable CS4014 this.ListenAsync(state); #pragma warning restore CS4014 } catch (Exception e) { await this.ExceptionHandler.OnExceptionAsync(e); } }
private async Task ListenAsync(TCPSocketClientState state) { try { do { Stream stream = state.Stream; int bytesRead = await stream.ReadAsync(state.Buffer); if (bytesRead <= 0) { TcpState tcpState = state.GetTcpState(); if (tcpState != TcpState.Established) { this.Dispatcher.TerminateProcess(state.Name); ProcessUpdateData updateData = new ProcessUpdateData(true, state.Name); await this.Dispatcher.BroadcastMessageAsync(MessageConstants.TERMINATE_IDENTIFIER, updateData.Serialize()); return; } state.ClearBuffer(); await Task.Delay(10); continue; } string data = Encoding.UTF8.GetString(state.Buffer, 0, bytesRead); state.ClearBuffer(); List <Message> msgs = state.Reader.Read(data); await this.Dispatcher.HandleMessagesAsync(state, msgs); // Maximum register payload size is 395 bytes, the client is sending garbage. if (!state.IsRegistered && state.Reader.Size >= 600) { state.Reader.Clear(); } }while (!state.IsDisposed && state.IsRegistered); } catch (Exception e) { await this.ExceptionHandler.OnClientStateExceptionAsync(state, e); } }