mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-16 17:23:04 +08:00
Add support for Maximum QoS property on CONNACK
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using MQTTnet.Packets;
|
||||
using MQTTnet.Protocol;
|
||||
|
||||
namespace MQTTnet.Client.Connecting
|
||||
{
|
||||
@@ -25,6 +26,8 @@ namespace MQTTnet.Client.Connecting
|
||||
public string ReasonString { get; set; }
|
||||
|
||||
public ushort? ReceiveMaximum { get; set; }
|
||||
|
||||
public MqttQualityOfServiceLevel? MaximumQoS { get; set; }
|
||||
|
||||
public string ResponseInformation { get; set; }
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ namespace MQTTnet.Formatter.V5
|
||||
MaximumPacketSize = connAckPacket.Properties?.MaximumPacketSize,
|
||||
ReasonString = connAckPacket.Properties?.ReasonString,
|
||||
ReceiveMaximum = connAckPacket.Properties?.ReceiveMaximum,
|
||||
MaximumQoS = connAckPacket.Properties?.MaximumQoS,
|
||||
ResponseInformation = connAckPacket.Properties?.ResponseInformation,
|
||||
TopicAliasMaximum = connAckPacket.Properties?.TopicAliasMaximum,
|
||||
ServerReference = connAckPacket.Properties?.ServerReference,
|
||||
|
||||
@@ -254,6 +254,10 @@ namespace MQTTnet.Formatter.V5
|
||||
{
|
||||
packet.Properties.ReceiveMaximum = propertiesReader.ReadReceiveMaximum();
|
||||
}
|
||||
else if (propertiesReader.CurrentPropertyId == MqttPropertyId.MaximumQoS)
|
||||
{
|
||||
packet.Properties.MaximumQoS = propertiesReader.ReadMaximumQoS();
|
||||
}
|
||||
else if (propertiesReader.CurrentPropertyId == MqttPropertyId.AssignedClientIdentifier)
|
||||
{
|
||||
packet.Properties.AssignedClientIdentifier = propertiesReader.ReadAssignedClientIdentifier();
|
||||
|
||||
@@ -203,6 +203,7 @@ namespace MQTTnet.Formatter.V5
|
||||
propertiesWriter.WriteAuthenticationData(packet.Properties.AuthenticationData);
|
||||
propertiesWriter.WriteRetainAvailable(packet.Properties.RetainAvailable);
|
||||
propertiesWriter.WriteReceiveMaximum(packet.Properties.ReceiveMaximum);
|
||||
propertiesWriter.WriteMaximumQoS(packet.Properties.MaximumQoS);
|
||||
propertiesWriter.WriteAssignedClientIdentifier(packet.Properties.AssignedClientIdentifier);
|
||||
propertiesWriter.WriteTopicAliasMaximum(packet.Properties.TopicAliasMaximum);
|
||||
propertiesWriter.WriteReasonString(packet.Properties.ReasonString);
|
||||
|
||||
@@ -82,6 +82,16 @@ namespace MQTTnet.Formatter.V5
|
||||
return _body.ReadTwoByteInteger();
|
||||
}
|
||||
|
||||
public MqttQualityOfServiceLevel ReadMaximumQoS()
|
||||
{
|
||||
byte value = _body.ReadByte();
|
||||
if (value > 1)
|
||||
{
|
||||
throw new MqttProtocolViolationException($"Unexpected Maximum QoS value: {value}");
|
||||
}
|
||||
return (MqttQualityOfServiceLevel)value;
|
||||
}
|
||||
|
||||
public string ReadAssignedClientIdentifier()
|
||||
{
|
||||
return _body.ReadStringWithLengthPrefix();
|
||||
|
||||
@@ -133,6 +133,17 @@ namespace MQTTnet.Formatter.V5
|
||||
Write(MqttPropertyId.ReceiveMaximum, value);
|
||||
}
|
||||
|
||||
public void WriteMaximumQoS(MqttQualityOfServiceLevel? value)
|
||||
{
|
||||
if (!value.HasValue || value.Value > MqttQualityOfServiceLevel.AtLeastOnce)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_packetWriter.Write((byte)MqttPropertyId.MaximumQoS);
|
||||
_packetWriter.Write((byte)value.Value);
|
||||
}
|
||||
|
||||
public void WriteMaximumPacketSize(uint? value)
|
||||
{
|
||||
WriteAsFourByteInteger(MqttPropertyId.MaximumPacketSize, value);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using MQTTnet.Protocol;
|
||||
|
||||
namespace MQTTnet.Packets
|
||||
{
|
||||
@@ -8,6 +9,8 @@ namespace MQTTnet.Packets
|
||||
|
||||
public ushort? ReceiveMaximum { get; set; }
|
||||
|
||||
public MqttQualityOfServiceLevel? MaximumQoS { get; set; }
|
||||
|
||||
public bool? RetainAvailable { get; set; }
|
||||
|
||||
public uint? MaximumPacketSize { get; set; }
|
||||
|
||||
Reference in New Issue
Block a user