private async Task SendResponse(TcpReceiveContext state, TcpResponse tcpResponse) { var content = tcpResponse.GetSendStream(); DebugOutput.Log("Sending response ({0} bytes)", content.Length); var sockStream = new AsyncSocketWriterReader(state.ClientSocket); await sockStream.WriteAsync(content, tcpResponse.Header); }
private static async Task Send(TransferHandle state, DataBatch transferDoc, ICompressionProvider compression) { var buffer = new byte[state.BufferSize]; using (var ms = new MemoryStream()) using (var cs = compression.CompressTo(ms)) { transferDoc.Save(cs); cs.Flush(); cs.Dispose(); ms.Flush(); ms.Position = 0; var sockWriter = new AsyncSocketWriterReader(state.ClientSocket, state.BufferSize); var sent = await sockWriter.WriteAsync(ms); DebugOutput.LogVerbose("Sent {0} bytes", sent); } }
private async Task ProcessTcpRequest(Socket clientSocket) { bool more = true; while (more) { var reader = new AsyncSocketWriterReader(clientSocket); using (var state = await reader.ReadAsync()) { using (var tcpResponse = new TcpResponse(state.Header, _compression)) { more = await ExecuteRequest(state, tcpResponse); } if (more) { DebugOutput.LogVerbose("Waiting for more data"); } else { DebugOutput.Log("Ending conversation"); state.ClientSocket.Disconnect(true); } } } }