Files
MQTTnet/Source/MQTTnet.Tests/MqttPacketSerializationHelper.cs
T
Christian 2fdbb02dc8 Fix parsing error of AUTH packet with empty body (#2070)
* Reformat code

* Fix issue

* Fix AUTH packet serialization
2024-09-07 09:49:10 +02:00

64 lines
2.1 KiB
C#

using System;
using System.Threading;
using MQTTnet.Adapter;
using MQTTnet.Diagnostics.Logger;
using MQTTnet.Formatter;
using MQTTnet.Packets;
using MQTTnet.Tests.Mockups;
namespace MQTTnet.Tests;
public sealed class MqttPacketSerializationHelper : IDisposable
{
readonly IMqttPacketFormatter _packetFormatter;
readonly MqttProtocolVersion _protocolVersion;
public MqttPacketSerializationHelper(MqttProtocolVersion protocolVersion = MqttProtocolVersion.V311, MqttBufferWriter bufferWriter = null)
{
_protocolVersion = protocolVersion;
if (bufferWriter == null)
{
bufferWriter = new MqttBufferWriter(4096, 65535);
}
_packetFormatter = MqttPacketFormatterAdapter.GetMqttPacketFormatter(_protocolVersion, bufferWriter);
}
public MqttPacket Decode(MqttPacketBuffer buffer)
{
using var channel = new MemoryMqttChannel(buffer.ToArray());
var formatterAdapter = new MqttPacketFormatterAdapter(_protocolVersion, new MqttBufferWriter(4096, 65535));
var adapter = new MqttChannelAdapter(channel, formatterAdapter, MqttNetNullLogger.Instance);
return adapter.ReceivePacketAsync(CancellationToken.None).GetAwaiter().GetResult();
}
public static MqttPacket DecodePacket(byte[] buffer, MqttProtocolVersion protocolVersion)
{
using var helper = new MqttPacketSerializationHelper(protocolVersion);
return helper.Decode(new MqttPacketBuffer(buffer));
}
public void Dispose()
{
}
public MqttPacketBuffer Encode(MqttPacket packet)
{
return _packetFormatter.Encode(packet);
}
public static TPacket EncodeAndDecodePacket<TPacket>(TPacket packet, MqttProtocolVersion protocolVersion) where TPacket : MqttPacket
{
using var helper = new MqttPacketSerializationHelper(protocolVersion);
var buffer = helper.Encode(packet);
return (TPacket)helper.Decode(buffer);
}
public static byte[] EncodePacket(MqttPacket packet, MqttProtocolVersion protocolVersion)
{
using var helper = new MqttPacketSerializationHelper(protocolVersion);
return helper.Encode(packet).ToArray();
}
}