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));
Connection = connection ?? throw new ArgumentNullException(nameof(connection));
if (Connection.Transport != null)
{
_input = Connection.Transport.Input;
_output = Connection.Transport.Output;
}
}
private PipeReader _input;
private PipeWriter _output;
@@ -117,8 +123,9 @@ namespace MQTTnet.AspNetCore
public async Task SendPacketAsync(MqttBasePacket packet, TimeSpan timeout, CancellationToken cancellationToken)
{
var buffer = PacketFormatterAdapter.Encode(packet).AsMemory();
var output = Connection.Transport.Output;
var buffer = PacketFormatterAdapter.Encode(packet);
var msg = buffer.AsMemory();
var output = _output;
await _writerSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
try
@@ -1,4 +1,5 @@
using MQTTnet.Formatter;
using MQTTnet.Exceptions;
using MQTTnet.Formatter;
using System;
using System.Buffers.Binary;
using System.Text;
@@ -32,13 +33,6 @@ namespace MQTTnet.AspNetCore
return _buffer.Slice(_offset).ToArray();
}
public ushort ReadUInt16()
{
var result = BinaryPrimitives.ReadUInt16BigEndian(_buffer.Span.Slice(_offset));
_offset += 2;
return result;
}
public byte[] ReadWithLengthPrefix()
{
return ReadSegmentWithLengthPrefix().ToArray();
@@ -66,27 +60,60 @@ namespace MQTTnet.AspNetCore
public ushort ReadTwoByteInteger()
{
throw new NotImplementedException();
var result = BinaryPrimitives.ReadUInt16BigEndian(_buffer.Span.Slice(_offset));
_offset += 2;
return result;
}
public uint ReadFourByteInteger()
{
throw new NotImplementedException();
var result = BinaryPrimitives.ReadUInt32BigEndian(_buffer.Span.Slice(_offset));
_offset += 4;
return result;
}
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()
{
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)
{
throw new NotImplementedException();
_offset = (int)position;
}
}
}
@@ -14,7 +14,7 @@
<ItemGroup>
<ProjectReference Include="..\..\Source\MQTTnet.AspnetCore\MQTTnet.AspNetCore.csproj" />
<ProjectReference Include="..\..\Source\MQTTnet\MQTTnet.csproj" />
<ProjectReference Include="..\MQTTnet.Core.Tests\MQTTnet.Tests.csproj" />
</ItemGroup>
</Project>
@@ -1,13 +1,13 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MQTTnet.Core.Tests;
using MQTTnet.Serializer;
using MQTTnet.Formatter;
using MQTTnet.Tests;
namespace MQTTnet.AspNetCore.Tests
{
[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();
result.SetBuffer(data);