Files
MQTTnet/Source/MQTTnet.Tests/MqttPacketSerializationHelper.cs
T
2022-07-12 16:37:32 +02:00

65 lines
2.1 KiB
C#

using System;
using System.Threading;
using MQTTnet.Adapter;
using MQTTnet.Diagnostics;
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, null, MqttNetNullLogger.Instance);
return adapter.ReceivePacketAsync(CancellationToken.None).GetAwaiter().GetResult();
}
}
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)
{
using (var helper = new MqttPacketSerializationHelper())
{
return helper.Encode(packet).ToArray();
}
}
}
}