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); }
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); } } }