Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
                    }
                }
            }
        }