public async Task SendRequestAsync(string key, Stream stream, int length, ResponseReceiver receiver) { printHelper?.Printline($"요청 전송: {currentSpaceInx} - {key}"); PacketContainer packetContainer = new PacketContainer(DataType.Request, encryptHelper); if (stream is MemoryStream) { if (stream.Position == stream.Length) { stream.Position = 0; } } var spaceInx = currentSpaceInx++; responseReceivers[spaceInx] = receiver; await packetContainer.WriteAsync(spaceInx); await packetContainer.WriteAsync(key); await packetContainer.WriteAsync(stream, length); await writeSemaphoreSlim.WaitAsync(); try { await packetContainer.Flush(networkStream); //TODO: Handle flush exception!!! } finally { writeSemaphoreSlim.Release(); } }
public async Task SendRequestAsync(string key, string data, ResponseReceiver receiver) { MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetByteCount(data)); await memoryStream.WriteAsync(data); memoryStream.Position = 0; await SendRequestAsync(key, memoryStream, (int)memoryStream.Length, receiver); }
/// <summary> /// Called when [process requests completed]. /// </summary> /// <param name="processRequestsAsyncCompletedArgs">The process requests async completed args.</param> /// <param name="responseReciever">The response reciever.</param> /// <param name="tempResponseArray">The temp response array.</param> /// <param name="requestsToSendAsArray">The requests to send as array.</param> public override void OnProcessRequestsCompleted( ProcessRequestsAsyncCompletedArgs processRequestsAsyncCompletedArgs, ResponseReceiver responseReciever, Response[] tempResponseArray, Request[] requestsToSendAsArray) { base.OnProcessRequestsCompleted(processRequestsAsyncCompletedArgs, responseReciever, tempResponseArray, requestsToSendAsArray); var requestEndTime = DateTime.Now; var timespan = requestEndTime - _requestStartTime; var requestString = GetRequestString(requestsToSendAsArray); Logger.Debug( "Response received for the following agatha batch: [{0}]. Elapsed milliseconds ({1})", requestString, timespan.TotalMilliseconds); }
/// <summary> /// Called when [process requests completed]. /// </summary> /// <param name="processRequestsAsyncCompletedArgs">The process requests async completed args.</param> /// <param name="responseReciever">The response reciever.</param> /// <param name="tempResponseArray">The temp response array.</param> /// <param name="requestsToSendAsArray">The requests to send as array.</param> public override void OnProcessRequestsCompleted( ProcessRequestsAsyncCompletedArgs processRequestsAsyncCompletedArgs, ResponseReceiver responseReciever, Response[] tempResponseArray, Request[] requestsToSendAsArray ) { base.OnProcessRequestsCompleted ( processRequestsAsyncCompletedArgs, responseReciever, tempResponseArray, requestsToSendAsArray ); var requestEndTime = DateTime.Now; var timespan = requestEndTime - _requestStartTime; var requestString = GetRequestString ( requestsToSendAsArray ); Logger.Debug ( "Response received for the following agatha batch: [{0}]. Elapsed milliseconds ({1})", requestString, timespan.TotalMilliseconds ); }
public void Can_read_single_response_with_data_from_single_receive() { // Arrange var data = "blahblahblah"; var fakeSocket = new FakeSocket { ReceiveCallback = Responses( string.Format("OK FOO {0}\r\n{1}\r\n", data.Length, data) ) }; // Act var receiver = new ResponseReceiver(fakeSocket); receiver.Reset(new Request("OK").ExpectData("OK")); var response = receiver.GetResponse(); Assert.AreEqual("OK", response.Status); // Assert Assert.AreEqual(new[] { "FOO", data.Length.ToString() }, response.Arguments); Assert.AreEqual(data, Encoding.ASCII.GetString(response.Data)); }
public void Can_read_single_response_with_many_data_chunks() { // Arrange var dataChunks = Enumerable.Repeat("a123456789", 15).ToArray(); var data = string.Concat(dataChunks); dataChunks[dataChunks.Length - 1] = dataChunks[dataChunks.Length - 1] + "\r\n"; var fakeSocket = new FakeSocket { ReceiveCallback = Responses( new[] {string.Format("OK FOO {0}\r\n", data.Length)} .Concat(dataChunks) .ToArray() ) }; // Act var receiver = new ResponseReceiver(fakeSocket); receiver.Reset(new Request("OK").ExpectData("OK")); var response = receiver.GetResponse(); Assert.AreEqual("OK", response.Status); // Assert Assert.AreEqual(new[] { "FOO", data.Length.ToString() }, response.Arguments); Assert.AreEqual(data, Encoding.ASCII.GetString(response.Data)); }
public Task SendRequestAsync(string key, byte[] data, ResponseReceiver receiver) { return(SendRequestAsync(key, new MemoryStream(data), data.Length, receiver)); }
public async Task SendRequestAsync(string key, ResponseReceiver receiver) { MemoryStream memoryStream = new MemoryStream(0); await SendRequestAsync(key, memoryStream, (int)memoryStream.Length, receiver); }