public async Task Should_be_able_to_encode_ack()
        {
            var serializer = new JsonTransportSerializer();
            var expectedId = Guid.NewGuid();
            var sender     = Substitute.For <ISendState>();

            var sut = new SimpleProtocolEncoder(serializer);
            await sut.EncodeAck(sender, expectedId);

            var sendBuffer = sender.ReceivedCalls().First().GetArguments()[0].As <byte[]>();
            var guidBytes  = new byte[16];

            Buffer.BlockCopy(sendBuffer, 1, guidBytes, 0, 16);
            var actual = new Guid(guidBytes);

            actual.Should().Be(expectedId);
        }
示例#2
0
        public async Task Run(CancellationToken token)
        {
            await ReceiveHandshake();

            while (!token.IsCancellationRequested)
            {
                var messageId = Guid.Empty;
                try
                {
                    var transportMessage = await ReceiveSingleMessage();

                    messageId = transportMessage.Id;
                    await _messageHandlerInvoker.HandleAsync(transportMessage.Body);

                    await _encoder.EncodeAck(_sendState, transportMessage.Id);
                }
                catch
                {
                    await _encoder.EncodeNak(_sendState, messageId);
                }
            }
        }