fixed build and added implementations for new read functions

This commit is contained in:
JanEggers
2019-04-15 14:14:32 +02:00
parent 149d01e173
commit cfc1b27950
4 changed files with 54 additions and 20 deletions
@@ -17,6 +17,12 @@ namespace MQTTnet.AspNetCore
{ {
PacketFormatterAdapter = packetFormatterAdapter ?? throw new ArgumentNullException(nameof(packetFormatterAdapter)); PacketFormatterAdapter = packetFormatterAdapter ?? throw new ArgumentNullException(nameof(packetFormatterAdapter));
Connection = connection ?? throw new ArgumentNullException(nameof(connection)); Connection = connection ?? throw new ArgumentNullException(nameof(connection));
if (Connection.Transport != null)
{
_input = Connection.Transport.Input;
_output = Connection.Transport.Output;
}
} }
private PipeReader _input; private PipeReader _input;
private PipeWriter _output; private PipeWriter _output;
@@ -117,8 +123,9 @@ namespace MQTTnet.AspNetCore
public async Task SendPacketAsync(MqttBasePacket packet, TimeSpan timeout, CancellationToken cancellationToken) public async Task SendPacketAsync(MqttBasePacket packet, TimeSpan timeout, CancellationToken cancellationToken)
{ {
var buffer = PacketFormatterAdapter.Encode(packet).AsMemory(); var buffer = PacketFormatterAdapter.Encode(packet);
var output = Connection.Transport.Output; var msg = buffer.AsMemory();
var output = _output;
await _writerSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); await _writerSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
try try
@@ -1,4 +1,5 @@
using MQTTnet.Formatter; using MQTTnet.Exceptions;
using MQTTnet.Formatter;
using System; using System;
using System.Buffers.Binary; using System.Buffers.Binary;
using System.Text; using System.Text;
@@ -32,13 +33,6 @@ namespace MQTTnet.AspNetCore
return _buffer.Slice(_offset).ToArray(); return _buffer.Slice(_offset).ToArray();
} }
public ushort ReadUInt16()
{
var result = BinaryPrimitives.ReadUInt16BigEndian(_buffer.Span.Slice(_offset));
_offset += 2;
return result;
}
public byte[] ReadWithLengthPrefix() public byte[] ReadWithLengthPrefix()
{ {
return ReadSegmentWithLengthPrefix().ToArray(); return ReadSegmentWithLengthPrefix().ToArray();
@@ -66,27 +60,60 @@ namespace MQTTnet.AspNetCore
public ushort ReadTwoByteInteger() public ushort ReadTwoByteInteger()
{ {
throw new NotImplementedException(); var result = BinaryPrimitives.ReadUInt16BigEndian(_buffer.Span.Slice(_offset));
_offset += 2;
return result;
} }
public uint ReadFourByteInteger() public uint ReadFourByteInteger()
{ {
throw new NotImplementedException(); var result = BinaryPrimitives.ReadUInt32BigEndian(_buffer.Span.Slice(_offset));
_offset += 4;
return result;
} }
public uint ReadVariableLengthInteger() public uint ReadVariableLengthInteger()
{ {
throw new NotImplementedException(); var multiplier = 1;
var value = 0U;
byte encodedByte;
do
{
encodedByte = ReadByte();
value += (uint)((encodedByte & 127) * multiplier);
if (multiplier > 2097152)
{
throw new MqttProtocolViolationException("Variable length integer is invalid.");
}
multiplier *= 128;
} while ((encodedByte & 128) != 0);
return value;
} }
public bool ReadBoolean() public bool ReadBoolean()
{ {
throw new NotImplementedException(); var buffer = ReadByte();
if (buffer == 0)
{
return false;
}
if (buffer == 1)
{
return true;
}
throw new MqttProtocolViolationException("Boolean values can be 0 or 1 only.");
} }
public void Seek(ulong position) public void Seek(ulong position)
{ {
throw new NotImplementedException(); _offset = (int)position;
} }
} }
} }
@@ -14,7 +14,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Source\MQTTnet.AspnetCore\MQTTnet.AspNetCore.csproj" /> <ProjectReference Include="..\..\Source\MQTTnet.AspnetCore\MQTTnet.AspNetCore.csproj" />
<ProjectReference Include="..\..\Source\MQTTnet\MQTTnet.csproj" /> <ProjectReference Include="..\MQTTnet.Core.Tests\MQTTnet.Tests.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>
@@ -1,13 +1,13 @@
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using MQTTnet.Core.Tests; using MQTTnet.Formatter;
using MQTTnet.Serializer; using MQTTnet.Tests;
namespace MQTTnet.AspNetCore.Tests namespace MQTTnet.AspNetCore.Tests
{ {
[TestClass] [TestClass]
public class MqttPacketSerializerTestsWithSpanBasedReader : MqttPacketSerializerTests public class MqttPacketSerializerTestsWithSpanBasedReader : MqttPacketSerializer_Tests
{ {
protected override IPacketBodyReader ReaderFactory(byte[] data) protected override IMqttPacketBodyReader ReaderFactory(byte[] data)
{ {
var result = new SpanBasedMqttPacketBodyReader(); var result = new SpanBasedMqttPacketBodyReader();
result.SetBuffer(data); result.SetBuffer(data);