示例#1
0
        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();
            }
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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));
        }
示例#7
0
 public Task SendRequestAsync(string key, byte[] data, ResponseReceiver receiver)
 {
     return(SendRequestAsync(key, new MemoryStream(data), data.Length, receiver));
 }
示例#8
0
        public async Task SendRequestAsync(string key, ResponseReceiver receiver)
        {
            MemoryStream memoryStream = new MemoryStream(0);

            await SendRequestAsync(key, memoryStream, (int)memoryStream.Length, receiver);
        }