mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-24 22:53:04 +08:00
fixed build and added implementations for new read functions
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user