mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-19 02:53:06 +08:00
Merge branch 'develop' of https://github.com/chkr1011/MQTTnet into develop
# Conflicts: # MQTTnet.Core/Serializer/MqttPacketReader.cs # MQTTnet.Core/Serializer/MqttPacketSerializer.cs # Tests/MQTTnet.TestApp.NetFramework/PerformanceTest.cs
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using MQTTnet.Core.Exceptions;
|
||||
using MQTTnet.Core.Protocol;
|
||||
using MQTTnet.Core.Channel;
|
||||
using MQTTnet.Core.Packets;
|
||||
|
||||
namespace MQTTnet.Core.Serializer
|
||||
@@ -13,14 +11,14 @@ namespace MQTTnet.Core.Serializer
|
||||
{
|
||||
private readonly MqttPacketHeader _header;
|
||||
|
||||
public MqttPacketReader(MqttPacketHeader header, Stream body)
|
||||
: base(body)
|
||||
public MqttPacketReader(Stream stream, MqttPacketHeader header)
|
||||
: base(stream, Encoding.UTF8, true)
|
||||
{
|
||||
_header = header;
|
||||
}
|
||||
|
||||
|
||||
public bool EndOfRemainingData => BaseStream.Position == _header.BodyLength;
|
||||
|
||||
|
||||
public override ushort ReadUInt16()
|
||||
{
|
||||
var buffer = ReadBytes(2);
|
||||
@@ -49,14 +47,11 @@ namespace MQTTnet.Core.Serializer
|
||||
return ReadBytes(_header.BodyLength - (int)BaseStream.Position);
|
||||
}
|
||||
|
||||
public static async Task<MqttPacketHeader> ReadHeaderFromSourceAsync(IMqttCommunicationChannel source, byte[] buffer)
|
||||
public static MqttPacketHeader ReadHeaderFromSource(Stream stream)
|
||||
{
|
||||
var fixedHeader = await ReadStreamByteAsync(source, buffer).ConfigureAwait(false);
|
||||
var byteReader = new ByteReader(fixedHeader);
|
||||
byteReader.Read(4);
|
||||
|
||||
var controlPacketType = (MqttControlPacketType)byteReader.Read(4);
|
||||
var bodyLength = await ReadBodyLengthFromSourceAsync(source, buffer).ConfigureAwait(false);
|
||||
var fixedHeader = (byte)stream.ReadByte();
|
||||
var controlPacketType = (MqttControlPacketType)(fixedHeader >> 4);
|
||||
var bodyLength = ReadBodyLengthFromSource(stream);
|
||||
|
||||
return new MqttPacketHeader
|
||||
{
|
||||
@@ -66,25 +61,7 @@ namespace MQTTnet.Core.Serializer
|
||||
};
|
||||
}
|
||||
|
||||
private static async Task<byte> ReadStreamByteAsync(IMqttCommunicationChannel source, byte[] readBuffer)
|
||||
{
|
||||
var result = await ReadFromSourceAsync(source, 1, readBuffer).ConfigureAwait(false);
|
||||
return result.Array[result.Offset];
|
||||
}
|
||||
|
||||
public static async Task<ArraySegment<byte>> ReadFromSourceAsync(IMqttCommunicationChannel source, int length, byte[] buffer)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await source.ReadAsync(length, buffer);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw new MqttCommunicationException(exception);
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<int> ReadBodyLengthFromSourceAsync(IMqttCommunicationChannel source, byte[] buffer)
|
||||
private static int ReadBodyLengthFromSource(Stream stream)
|
||||
{
|
||||
// Alorithm taken from http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html.
|
||||
var multiplier = 1;
|
||||
@@ -92,7 +69,7 @@ namespace MQTTnet.Core.Serializer
|
||||
byte encodedByte;
|
||||
do
|
||||
{
|
||||
encodedByte = await ReadStreamByteAsync(source, buffer).ConfigureAwait(false);
|
||||
encodedByte = (byte)stream.ReadByte();
|
||||
value += (encodedByte & 127) * multiplier;
|
||||
multiplier *= 128;
|
||||
if (multiplier > 128 * 128 * 128)
|
||||
|
||||
Reference in New Issue
Block a user