コード例 #1
0
        public async Task SendRequestAsync_WaitsTillAllDataSent()
        {
            var payLoadSender = new PayloadSender();
            var tcs           = new TaskCompletionSource <bool>();
            DisconnectedEventHandler eventHandler = (sender, args) =>
            {
                tcs.TrySetException(new Exception(args.Reason));
            };

            payLoadSender.Disconnected += eventHandler;
            payLoadSender.Connect(GetMockedTransportSender(tcs, TransportConstants.MaxPayloadLength * 4));
            var sendOperations = new SendOperations(payLoadSender);

            try
            {
                using (var stream = GetMockedStream(TransportConstants.MaxPayloadLength * 4))
                {
                    var request = new StreamingRequest();
                    request.AddStream(new StreamContent(stream));
                    await sendOperations.SendRequestAsync(Guid.NewGuid(), request);
                }

                await tcs.Task;
            }
            finally
            {
                payLoadSender.Disconnected -= eventHandler;
            }
        }
コード例 #2
0
        public async Task <ReceiveResponse> SendRequestAsync(StreamingRequest request, CancellationToken cancellationToken = default(CancellationToken))
        {
            var requestId    = Guid.NewGuid();
            var responseTask = _requestManager.GetResponseAsync(requestId, cancellationToken);
            var requestTask  = _sendOperations.SendRequestAsync(requestId, request);

            cancellationToken.ThrowIfCancellationRequested();
            await Task.WhenAll(requestTask, responseTask).ConfigureAwait(false);

            return(responseTask.Result);
        }
コード例 #3
0
        public async Task RequestDisassembler_WithJsonStream_Sends()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);
            var ops = new SendOperations(sender);

            var request = StreamingRequest.CreatePost("/a/b");

            request.AddStream(new StringContent("abc", Encoding.ASCII));

            await ops.SendRequestAsync(Guid.NewGuid(), request);

            Assert.AreEqual(4, transport.Buffers.Count);
        }
コード例 #4
0
        public async Task <ReceiveResponse> SendRequestAsync(StreamingRequest request, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var requestId    = Guid.NewGuid();
            var responseTask = _requestManager.GetResponseAsync(requestId, cancellationToken);
            var requestTask  = _sendOperations.SendRequestAsync(requestId, request, cancellationToken);

            cancellationToken.ThrowIfCancellationRequested();
            await Task.WhenAll(requestTask, responseTask).ConfigureAwait(false);

            return(await responseTask.ConfigureAwait(false));
        }
コード例 #5
0
        public async Task RequestDisassembler_WithVariableStream_Sends()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);
            var ops = new SendOperations(sender);

            var request = StreamingRequest.CreatePost("/a/b");
            var stream  = new PayloadStream(new PayloadStreamAssembler(null, Guid.NewGuid(), "blah", 100));

            stream.Write(new byte[100], 0, 100);
            request.AddStream(new StreamContent(stream));

            await ops.SendRequestAsync(Guid.NewGuid(), request);

            Assert.AreEqual(5, transport.Buffers.Count);
        }