mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-20 11:45:43 +08:00
Refactor code.
This commit is contained in:
@@ -17,7 +17,6 @@ namespace MQTTnet.Formatter
|
||||
Password = clientOptions.Credentials?.Password,
|
||||
CleanSession = clientOptions.CleanSession,
|
||||
KeepAlivePeriod = (ushort) clientOptions.KeepAlivePeriod.TotalSeconds,
|
||||
WillMessage = clientOptions.WillMessage,
|
||||
Properties =
|
||||
{
|
||||
AuthenticationMethod = clientOptions.AuthenticationMethod,
|
||||
@@ -32,6 +31,26 @@ namespace MQTTnet.Formatter
|
||||
}
|
||||
};
|
||||
|
||||
if (clientOptions.WillMessage != null)
|
||||
{
|
||||
connectPacket.WillFlag = true;
|
||||
connectPacket.WillTopic = clientOptions.WillMessage.Topic;
|
||||
connectPacket.WillQoS = clientOptions.WillMessage.QualityOfServiceLevel;
|
||||
connectPacket.WillMessage = clientOptions.WillMessage.Payload;
|
||||
connectPacket.WillRetain = clientOptions.WillMessage.Retain;
|
||||
connectPacket.WillProperties.ContentType = clientOptions.WillMessage.ContentType;
|
||||
connectPacket.WillProperties.CorrelationData = clientOptions.WillMessage.CorrelationData;
|
||||
connectPacket.WillProperties.ResponseTopic = clientOptions.WillMessage.ResponseTopic;
|
||||
connectPacket.WillProperties.MessageExpiryInterval = clientOptions.WillMessage.MessageExpiryInterval;
|
||||
connectPacket.WillProperties.PayloadFormatIndicator = clientOptions.WillMessage.PayloadFormatIndicator;
|
||||
//connectPacket.WillProperties.WillDelayInterval = clientOptions.WillMessage.;
|
||||
|
||||
if (clientOptions.WillMessage.UserProperties != null)
|
||||
{
|
||||
connectPacket.WillProperties.UserProperties.AddRange(clientOptions.WillMessage.UserProperties);
|
||||
}
|
||||
}
|
||||
|
||||
if (clientOptions.UserProperties != null)
|
||||
{
|
||||
connectPacket.Properties.UserProperties.AddRange(clientOptions.UserProperties);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
namespace MQTTnet.Formatter
|
||||
{
|
||||
public sealed class MqttPacketFactories
|
||||
{
|
||||
public MqttConnectPacketFactory Connect { get; } = new MqttConnectPacketFactory();
|
||||
|
||||
public MqttConnAckPacketFactory ConnAck { get; } = new MqttConnAckPacketFactory();
|
||||
|
||||
public MqttDisconnectPacketFactory Disconnect { get; } = new MqttDisconnectPacketFactory();
|
||||
|
||||
public MqttSubscribePacketFactory Subscribe { get; } = new MqttSubscribePacketFactory();
|
||||
|
||||
public MqttSubAckPacketFactory SubAck { get; } = new MqttSubAckPacketFactory();
|
||||
|
||||
public MqttUnsubscribePacketFactory Unsubscribe { get; } = new MqttUnsubscribePacketFactory();
|
||||
|
||||
public MqttUnsubAckPacketFactory UnsubAck { get; } = new MqttUnsubAckPacketFactory();
|
||||
|
||||
public MqttPublishPacketFactory Publish { get; } = new MqttPublishPacketFactory();
|
||||
|
||||
public MqttPubAckPacketFactory PubAck { get; } = new MqttPubAckPacketFactory();
|
||||
|
||||
public MqttPubRelPacketFactory PubRel { get; } = new MqttPubRelPacketFactory();
|
||||
|
||||
public MqttPubRecPacketFactory PubRec { get; } = new MqttPubRecPacketFactory();
|
||||
|
||||
public MqttPubCompPacketFactory PubComp { get; } = new MqttPubCompPacketFactory();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using MQTTnet.Exceptions;
|
||||
using MQTTnet.Packets;
|
||||
|
||||
namespace MQTTnet.Formatter
|
||||
@@ -41,5 +42,36 @@ namespace MQTTnet.Formatter
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
public MqttPublishPacket Create(MqttConnectPacket connectPacket)
|
||||
{
|
||||
if (connectPacket == null) throw new ArgumentNullException(nameof(connectPacket));
|
||||
|
||||
if (!connectPacket.WillFlag)
|
||||
{
|
||||
throw new MqttProtocolViolationException("The CONNECT packet contains no will message (WillFlag).");
|
||||
}
|
||||
|
||||
var packet = new MqttPublishPacket
|
||||
{
|
||||
Topic = connectPacket.WillTopic,
|
||||
Payload = connectPacket.WillMessage,
|
||||
QualityOfServiceLevel = connectPacket.WillQoS,
|
||||
Retain = connectPacket.WillRetain,
|
||||
Dup = false,
|
||||
Properties =
|
||||
{
|
||||
ContentType = connectPacket.WillProperties.ContentType,
|
||||
CorrelationData = connectPacket.WillProperties.CorrelationData,
|
||||
MessageExpiryInterval = connectPacket.WillProperties.MessageExpiryInterval,
|
||||
PayloadFormatIndicator = connectPacket.WillProperties.PayloadFormatIndicator,
|
||||
ResponseTopic = connectPacket.WillProperties.ResponseTopic
|
||||
}
|
||||
};
|
||||
|
||||
packet.Properties.UserProperties.AddRange(connectPacket.WillProperties.UserProperties);
|
||||
|
||||
return packet;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ namespace MQTTnet.Formatter.V3
|
||||
public class MqttV310PacketFormatter : IMqttPacketFormatter
|
||||
{
|
||||
const int FixedHeaderSize = 1;
|
||||
|
||||
|
||||
static readonly MqttDisconnectPacket DisconnectPacket = new MqttDisconnectPacket();
|
||||
|
||||
readonly IMqttPacketWriter _packetWriter;
|
||||
@@ -30,7 +30,7 @@ namespace MQTTnet.Formatter.V3
|
||||
_packetWriter.Seek(5);
|
||||
|
||||
var fixedHeader = EncodePacket(packet, _packetWriter);
|
||||
var remainingLength = (uint)(_packetWriter.Length - 5);
|
||||
var remainingLength = (uint) (_packetWriter.Length - 5);
|
||||
|
||||
var remainingLengthSize = MqttPacketWriter.GetLengthOfVariableInteger(remainingLength);
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace MQTTnet.Formatter.V3
|
||||
throw new MqttProtocolViolationException($"The packet type is invalid ({controlPacketType}).");
|
||||
}
|
||||
|
||||
switch ((MqttControlPacketType)controlPacketType)
|
||||
switch ((MqttControlPacketType) controlPacketType)
|
||||
{
|
||||
case MqttControlPacketType.Connect: return DecodeConnectPacket(receivedMqttPacket.BodyReader);
|
||||
case MqttControlPacketType.ConnAck: return DecodeConnAckPacket(receivedMqttPacket.BodyReader);
|
||||
@@ -187,7 +187,7 @@ namespace MQTTnet.Formatter.V3
|
||||
var topicFilter = new MqttTopicFilter
|
||||
{
|
||||
Topic = body.ReadStringWithLengthPrefix(),
|
||||
QualityOfServiceLevel = (MqttQualityOfServiceLevel)body.ReadByte()
|
||||
QualityOfServiceLevel = (MqttQualityOfServiceLevel) body.ReadByte()
|
||||
};
|
||||
|
||||
packet.TopicFilters.Add(topicFilter);
|
||||
@@ -201,7 +201,7 @@ namespace MQTTnet.Formatter.V3
|
||||
ThrowIfBodyIsEmpty(receivedMqttPacket.BodyReader);
|
||||
|
||||
var retain = (receivedMqttPacket.FixedHeader & 0x1) > 0;
|
||||
var qualityOfServiceLevel = (MqttQualityOfServiceLevel)(receivedMqttPacket.FixedHeader >> 1 & 0x3);
|
||||
var qualityOfServiceLevel = (MqttQualityOfServiceLevel) (receivedMqttPacket.FixedHeader >> 1 & 0x3);
|
||||
var dup = (receivedMqttPacket.FixedHeader & 0x8) > 0;
|
||||
|
||||
var topic = receivedMqttPacket.BodyReader.ReadStringWithLengthPrefix();
|
||||
@@ -267,13 +267,12 @@ namespace MQTTnet.Formatter.V3
|
||||
|
||||
if (willFlag)
|
||||
{
|
||||
packet.WillMessage = new MqttApplicationMessage
|
||||
{
|
||||
Topic = body.ReadStringWithLengthPrefix(),
|
||||
Payload = body.ReadWithLengthPrefix(),
|
||||
QualityOfServiceLevel = (MqttQualityOfServiceLevel)willQoS,
|
||||
Retain = willRetain
|
||||
};
|
||||
packet.WillFlag = true;
|
||||
packet.WillQoS = (MqttQualityOfServiceLevel) willQoS;
|
||||
packet.WillRetain = willRetain;
|
||||
|
||||
packet.WillTopic = body.ReadStringWithLengthPrefix();
|
||||
packet.WillMessage = body.ReadWithLengthPrefix();
|
||||
}
|
||||
|
||||
if (usernameFlag)
|
||||
@@ -301,7 +300,7 @@ namespace MQTTnet.Formatter.V3
|
||||
|
||||
while (!body.EndOfStream)
|
||||
{
|
||||
packet.ReturnCodes.Add((MqttSubscribeReturnCode)body.ReadByte());
|
||||
packet.ReturnCodes.Add((MqttSubscribeReturnCode) body.ReadByte());
|
||||
}
|
||||
|
||||
return packet;
|
||||
@@ -314,7 +313,7 @@ namespace MQTTnet.Formatter.V3
|
||||
var packet = new MqttConnAckPacket();
|
||||
|
||||
body.ReadByte(); // Reserved.
|
||||
packet.ReturnCode = (MqttConnectReturnCode)body.ReadByte();
|
||||
packet.ReturnCode = (MqttConnectReturnCode) body.ReadByte();
|
||||
|
||||
return packet;
|
||||
}
|
||||
@@ -351,12 +350,12 @@ namespace MQTTnet.Formatter.V3
|
||||
connectFlags |= 0x2;
|
||||
}
|
||||
|
||||
if (packet.WillMessage != null)
|
||||
if (packet.WillFlag)
|
||||
{
|
||||
connectFlags |= 0x4;
|
||||
connectFlags |= (byte)((byte)packet.WillMessage.QualityOfServiceLevel << 3);
|
||||
connectFlags |= (byte) ((byte) packet.WillQoS << 3);
|
||||
|
||||
if (packet.WillMessage.Retain)
|
||||
if (packet.WillRetain)
|
||||
{
|
||||
connectFlags |= 0x20;
|
||||
}
|
||||
@@ -381,10 +380,10 @@ namespace MQTTnet.Formatter.V3
|
||||
packetWriter.Write(packet.KeepAlivePeriod);
|
||||
packetWriter.WriteWithLengthPrefix(packet.ClientId);
|
||||
|
||||
if (packet.WillMessage != null)
|
||||
if (packet.WillFlag)
|
||||
{
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Topic);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Payload);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillTopic);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage);
|
||||
}
|
||||
|
||||
if (packet.Username != null)
|
||||
@@ -403,7 +402,7 @@ namespace MQTTnet.Formatter.V3
|
||||
protected virtual byte EncodeConnAckPacket(MqttConnAckPacket packet, IMqttPacketWriter packetWriter)
|
||||
{
|
||||
packetWriter.Write(0); // Reserved.
|
||||
packetWriter.Write((byte)packet.ReturnCode);
|
||||
packetWriter.Write((byte) packet.ReturnCode);
|
||||
|
||||
return MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.ConnAck);
|
||||
}
|
||||
@@ -455,7 +454,7 @@ namespace MQTTnet.Formatter.V3
|
||||
fixedHeader |= 0x01;
|
||||
}
|
||||
|
||||
fixedHeader |= (byte)((byte)packet.QualityOfServiceLevel << 1);
|
||||
fixedHeader |= (byte) ((byte) packet.QualityOfServiceLevel << 1);
|
||||
|
||||
if (packet.Dup)
|
||||
{
|
||||
@@ -525,14 +524,14 @@ namespace MQTTnet.Formatter.V3
|
||||
{
|
||||
throw new MqttProtocolViolationException("RetainAsPublished is not supported in 3.1.1.");
|
||||
}
|
||||
|
||||
|
||||
if (topicFilter.RetainHandling != MqttRetainHandling.SendAtSubscribe)
|
||||
{
|
||||
throw new MqttProtocolViolationException("RetainHandling is not supported in 3.1.1.");
|
||||
}
|
||||
|
||||
|
||||
packetWriter.WriteWithLengthPrefix(topicFilter.Topic);
|
||||
packetWriter.Write((byte)topicFilter.QualityOfServiceLevel);
|
||||
packetWriter.Write((byte) topicFilter.QualityOfServiceLevel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -552,7 +551,7 @@ namespace MQTTnet.Formatter.V3
|
||||
{
|
||||
foreach (var packetSubscribeReturnCode in packet.ReturnCodes)
|
||||
{
|
||||
packetWriter.Write((byte)packetSubscribeReturnCode);
|
||||
packetWriter.Write((byte) packetSubscribeReturnCode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -606,4 +605,4 @@ namespace MQTTnet.Formatter.V3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,12 +24,12 @@ namespace MQTTnet.Formatter.V3
|
||||
connectFlags |= 0x2;
|
||||
}
|
||||
|
||||
if (packet.WillMessage != null)
|
||||
if (packet.WillFlag)
|
||||
{
|
||||
connectFlags |= 0x4;
|
||||
connectFlags |= (byte)((byte)packet.WillMessage.QualityOfServiceLevel << 3);
|
||||
connectFlags |= (byte)((byte)packet.WillQoS << 3);
|
||||
|
||||
if (packet.WillMessage.Retain)
|
||||
if (packet.WillRetain)
|
||||
{
|
||||
connectFlags |= 0x20;
|
||||
}
|
||||
@@ -54,10 +54,10 @@ namespace MQTTnet.Formatter.V3
|
||||
packetWriter.Write(packet.KeepAlivePeriod);
|
||||
packetWriter.WriteWithLengthPrefix(packet.ClientId);
|
||||
|
||||
if (packet.WillMessage != null)
|
||||
if (packet.WillFlag)
|
||||
{
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Topic);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Payload);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillTopic);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage);
|
||||
}
|
||||
|
||||
if (packet.Username != null)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using MQTTnet.Adapter;
|
||||
using MQTTnet.Exceptions;
|
||||
using MQTTnet.Packets;
|
||||
@@ -72,11 +71,9 @@ namespace MQTTnet.Formatter.V5
|
||||
|
||||
if (willMessageFlag)
|
||||
{
|
||||
packet.WillMessage = new MqttApplicationMessage
|
||||
{
|
||||
QualityOfServiceLevel = (MqttQualityOfServiceLevel)willMessageQoS,
|
||||
Retain = willMessageRetainFlag
|
||||
};
|
||||
packet.WillFlag = true;
|
||||
packet.WillQoS = (MqttQualityOfServiceLevel) willMessageQoS;
|
||||
packet.WillRetain = willMessageRetainFlag;
|
||||
}
|
||||
|
||||
packet.KeepAlivePeriod = body.ReadTwoByteInteger();
|
||||
@@ -128,7 +125,7 @@ namespace MQTTnet.Formatter.V5
|
||||
|
||||
packet.ClientId = body.ReadStringWithLengthPrefix();
|
||||
|
||||
if (packet.WillMessage != null)
|
||||
if (packet.WillFlag)
|
||||
{
|
||||
var willPropertiesReader = new MqttV500PropertiesReader(body);
|
||||
|
||||
@@ -136,50 +133,31 @@ namespace MQTTnet.Formatter.V5
|
||||
{
|
||||
if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.PayloadFormatIndicator)
|
||||
{
|
||||
packet.WillMessage.PayloadFormatIndicator = propertiesReader.ReadPayloadFormatIndicator();
|
||||
packet.WillProperties.PayloadFormatIndicator = propertiesReader.ReadPayloadFormatIndicator();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.MessageExpiryInterval)
|
||||
{
|
||||
packet.WillMessage.MessageExpiryInterval = propertiesReader.ReadMessageExpiryInterval();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.TopicAlias)
|
||||
{
|
||||
packet.WillMessage.TopicAlias = propertiesReader.ReadTopicAlias();
|
||||
packet.WillProperties.MessageExpiryInterval = propertiesReader.ReadMessageExpiryInterval();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.ResponseTopic)
|
||||
{
|
||||
packet.WillMessage.ResponseTopic = propertiesReader.ReadResponseTopic();
|
||||
packet.WillProperties.ResponseTopic = propertiesReader.ReadResponseTopic();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.CorrelationData)
|
||||
{
|
||||
packet.WillMessage.CorrelationData = propertiesReader.ReadCorrelationData();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.SubscriptionIdentifier)
|
||||
{
|
||||
if (packet.WillMessage.SubscriptionIdentifiers == null)
|
||||
{
|
||||
packet.WillMessage.SubscriptionIdentifiers = new List<uint>();
|
||||
}
|
||||
|
||||
packet.WillMessage.SubscriptionIdentifiers.Add(propertiesReader.ReadSubscriptionIdentifier());
|
||||
packet.WillProperties.CorrelationData = propertiesReader.ReadCorrelationData();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.ContentType)
|
||||
{
|
||||
packet.WillMessage.ContentType = propertiesReader.ReadContentType();
|
||||
packet.WillProperties.ContentType = propertiesReader.ReadContentType();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.WillDelayInterval)
|
||||
{
|
||||
// This is a special case!
|
||||
packet.Properties.WillDelayInterval = propertiesReader.ReadWillDelayInterval();
|
||||
packet.WillProperties.WillDelayInterval = propertiesReader.ReadWillDelayInterval();
|
||||
}
|
||||
else if (willPropertiesReader.CurrentPropertyId == MqttPropertyId.UserProperty)
|
||||
{
|
||||
if (packet.WillMessage.UserProperties == null)
|
||||
{
|
||||
packet.WillMessage.UserProperties = new List<MqttUserProperty>();
|
||||
}
|
||||
|
||||
propertiesReader.AddUserPropertyTo(packet.Properties.UserProperties);
|
||||
propertiesReader.AddUserPropertyTo(packet.WillProperties.UserProperties);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -187,8 +165,8 @@ namespace MQTTnet.Formatter.V5
|
||||
}
|
||||
}
|
||||
|
||||
packet.WillMessage.Topic = body.ReadStringWithLengthPrefix();
|
||||
packet.WillMessage.Payload = body.ReadWithLengthPrefix();
|
||||
packet.WillTopic = body.ReadStringWithLengthPrefix();
|
||||
packet.WillMessage = body.ReadWithLengthPrefix();
|
||||
}
|
||||
|
||||
if (usernameFlag)
|
||||
|
||||
@@ -88,12 +88,12 @@ namespace MQTTnet.Formatter.V5
|
||||
connectFlags |= 0x2;
|
||||
}
|
||||
|
||||
if (packet.WillMessage != null)
|
||||
if (packet.WillFlag)
|
||||
{
|
||||
connectFlags |= 0x4;
|
||||
connectFlags |= (byte)((byte)packet.WillMessage.QualityOfServiceLevel << 3);
|
||||
connectFlags |= (byte)((byte)packet.WillQoS << 3);
|
||||
|
||||
if (packet.WillMessage.Retain)
|
||||
if (packet.WillRetain)
|
||||
{
|
||||
connectFlags |= 0x20;
|
||||
}
|
||||
@@ -135,25 +135,23 @@ namespace MQTTnet.Formatter.V5
|
||||
|
||||
packetWriter.WriteWithLengthPrefix(packet.ClientId);
|
||||
|
||||
if (packet.WillMessage != null)
|
||||
if (packet.WillFlag)
|
||||
{
|
||||
var willPropertiesWriter = new MqttV500PropertiesWriter();
|
||||
willPropertiesWriter.WritePayloadFormatIndicator(packet.WillMessage.PayloadFormatIndicator);
|
||||
willPropertiesWriter.WriteMessageExpiryInterval(packet.WillMessage.MessageExpiryInterval);
|
||||
willPropertiesWriter.WriteTopicAlias(packet.WillMessage.TopicAlias);
|
||||
willPropertiesWriter.WriteResponseTopic(packet.WillMessage.ResponseTopic);
|
||||
willPropertiesWriter.WriteCorrelationData(packet.WillMessage.CorrelationData);
|
||||
willPropertiesWriter.WriteSubscriptionIdentifiers(packet.WillMessage.SubscriptionIdentifiers);
|
||||
willPropertiesWriter.WriteContentType(packet.WillMessage.ContentType);
|
||||
willPropertiesWriter.WriteUserProperties(packet.WillMessage.UserProperties);
|
||||
willPropertiesWriter.WritePayloadFormatIndicator(packet.WillProperties.PayloadFormatIndicator);
|
||||
willPropertiesWriter.WriteMessageExpiryInterval(packet.WillProperties.MessageExpiryInterval);
|
||||
willPropertiesWriter.WriteResponseTopic(packet.WillProperties.ResponseTopic);
|
||||
willPropertiesWriter.WriteCorrelationData(packet.WillProperties.CorrelationData);
|
||||
willPropertiesWriter.WriteContentType(packet.WillProperties.ContentType);
|
||||
willPropertiesWriter.WriteUserProperties(packet.WillProperties.UserProperties);
|
||||
|
||||
// This is a special case!
|
||||
willPropertiesWriter.WriteWillDelayInterval(packet.Properties?.WillDelayInterval);
|
||||
|
||||
willPropertiesWriter.WriteTo(packetWriter);
|
||||
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Topic);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Payload);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillTopic);
|
||||
packetWriter.WriteWithLengthPrefix(packet.WillMessage);
|
||||
}
|
||||
|
||||
if (packet.Username != null)
|
||||
|
||||
@@ -143,7 +143,7 @@ namespace MQTTnet.Formatter.V5
|
||||
return _body.ReadVariableLengthInteger();
|
||||
}
|
||||
|
||||
public MqttPayloadFormatIndicator? ReadPayloadFormatIndicator()
|
||||
public MqttPayloadFormatIndicator ReadPayloadFormatIndicator()
|
||||
{
|
||||
return (MqttPayloadFormatIndicator)_body.ReadByte();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user