From 73b051d15986a58535f235accaffc8712e7d84e4 Mon Sep 17 00:00:00 2001 From: JanEggers Date: Mon, 15 Apr 2019 15:00:09 +0200 Subject: [PATCH] reuse reader --- Source/MQTTnet.AspnetCore/MqttConnectionContext.cs | 7 ++++++- Source/MQTTnet.AspnetCore/ReaderExtensions.cs | 4 +--- Tests/MQTTnet.AspNetCore.Tests/ReaderExtensionsTest.cs | 10 ++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Source/MQTTnet.AspnetCore/MqttConnectionContext.cs b/Source/MQTTnet.AspnetCore/MqttConnectionContext.cs index 400aa070..6d92bf54 100644 --- a/Source/MQTTnet.AspnetCore/MqttConnectionContext.cs +++ b/Source/MQTTnet.AspnetCore/MqttConnectionContext.cs @@ -23,9 +23,14 @@ namespace MQTTnet.AspNetCore _input = Connection.Transport.Input; _output = Connection.Transport.Output; } + + + _reader = new SpanBasedMqttPacketBodyReader(); } + private PipeReader _input; private PipeWriter _output; + private readonly SpanBasedMqttPacketBodyReader _reader; public string Endpoint => Connection.ConnectionId; public bool IsSecureConnection => false; // TODO: Fix detection (WS vs. WSS). @@ -88,7 +93,7 @@ namespace MQTTnet.AspNetCore { if (!buffer.IsEmpty) { - if (PacketFormatterAdapter.TryDecode(buffer, out var packet, out consumed, out observed)) + if (PacketFormatterAdapter.TryDecode(_reader, buffer, out var packet, out consumed, out observed)) { return packet; } diff --git a/Source/MQTTnet.AspnetCore/ReaderExtensions.cs b/Source/MQTTnet.AspnetCore/ReaderExtensions.cs index e2cb1c44..8af7ecbe 100644 --- a/Source/MQTTnet.AspnetCore/ReaderExtensions.cs +++ b/Source/MQTTnet.AspnetCore/ReaderExtensions.cs @@ -9,7 +9,7 @@ namespace MQTTnet.AspNetCore { public static class ReaderExtensions { - public static bool TryDecode(this MqttPacketFormatterAdapter formatter, in ReadOnlySequence input, out MqttBasePacket packet, out SequencePosition consumed, out SequencePosition observed) + public static bool TryDecode(this MqttPacketFormatterAdapter formatter, SpanBasedMqttPacketBodyReader reader, in ReadOnlySequence input, out MqttBasePacket packet, out SequencePosition consumed, out SequencePosition observed) { if (formatter == null) throw new ArgumentNullException(nameof(formatter)); @@ -36,8 +36,6 @@ namespace MQTTnet.AspNetCore var bodySlice = copy.Slice(0, bodyLength); var buffer = bodySlice.GetMemory(); - - var reader = new SpanBasedMqttPacketBodyReader(); reader.SetBuffer(buffer); var receivedMqttPacket = new ReceivedMqttPacket(fixedheader, reader, buffer.Length + 2); diff --git a/Tests/MQTTnet.AspNetCore.Tests/ReaderExtensionsTest.cs b/Tests/MQTTnet.AspNetCore.Tests/ReaderExtensionsTest.cs index dedeff33..4d69d37c 100644 --- a/Tests/MQTTnet.AspNetCore.Tests/ReaderExtensionsTest.cs +++ b/Tests/MQTTnet.AspNetCore.Tests/ReaderExtensionsTest.cs @@ -24,21 +24,23 @@ namespace MQTTnet.AspNetCore.Tests var observed = part.Start; var result = false; + var reader = new SpanBasedMqttPacketBodyReader(); + part = sequence.Slice(sequence.Start, 0); // empty message should fail - result = serializer.TryDecode(part, out packet, out consumed, out observed); + result = serializer.TryDecode(reader, part, out packet, out consumed, out observed); Assert.IsFalse(result); part = sequence.Slice(sequence.Start, 1); // partial fixed header should fail - result = serializer.TryDecode(part, out packet, out consumed, out observed); + result = serializer.TryDecode(reader, part, out packet, out consumed, out observed); Assert.IsFalse(result); part = sequence.Slice(sequence.Start, 4); // partial body should fail - result = serializer.TryDecode(part, out packet, out consumed, out observed); + result = serializer.TryDecode(reader, part, out packet, out consumed, out observed); Assert.IsFalse(result); part = sequence; // complete msg should work - result = serializer.TryDecode(part, out packet, out consumed, out observed); + result = serializer.TryDecode(reader, part, out packet, out consumed, out observed); Assert.IsTrue(result); } }