mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-22 21:03:06 +08:00
Update docs.
This commit is contained in:
@@ -27,6 +27,7 @@
|
|||||||
* [Server] Fixed bug in PubRel packet generation (MQTTv5 only).
|
* [Server] Fixed bug in PubRel packet generation (MQTTv5 only).
|
||||||
* [Server] Improved message processing performance (+ ~5%).
|
* [Server] Improved message processing performance (+ ~5%).
|
||||||
* [Server] Fix wrong usage of client session items for undelivered messages.
|
* [Server] Fix wrong usage of client session items for undelivered messages.
|
||||||
|
* [Server] Allow to respond with a reason code in PUBACK/PUBREC (thanks to @muneebmajeed).
|
||||||
|
|
||||||
Git commit: $gitCommit
|
Git commit: $gitCommit
|
||||||
</releaseNotes>
|
</releaseNotes>
|
||||||
|
|||||||
@@ -637,25 +637,27 @@ namespace MQTTnet.Client
|
|||||||
}
|
}
|
||||||
else if (publishPacket.QualityOfServiceLevel == MqttQualityOfServiceLevel.AtLeastOnce)
|
else if (publishPacket.QualityOfServiceLevel == MqttQualityOfServiceLevel.AtLeastOnce)
|
||||||
{
|
{
|
||||||
var reasonCode = await HandleReceivedApplicationMessageAsync(publishPacket).ConfigureAwait(false);
|
var eventArgs = await HandleReceivedApplicationMessageAsync(publishPacket).ConfigureAwait(false);
|
||||||
if (reasonCode != null && Enum.IsDefined(typeof(MqttPubAckReasonCode), reasonCode.Value))
|
|
||||||
|
if (!eventArgs.ProcessingFailed)
|
||||||
{
|
{
|
||||||
await SendAsync(new MqttPubAckPacket
|
await SendAsync(new MqttPubAckPacket
|
||||||
{
|
{
|
||||||
PacketIdentifier = publishPacket.PacketIdentifier,
|
PacketIdentifier = publishPacket.PacketIdentifier,
|
||||||
ReasonCode = (MqttPubAckReasonCode)reasonCode.Value
|
ReasonCode = (MqttPubAckReasonCode)eventArgs.ReasonCode
|
||||||
}, cancellationToken).ConfigureAwait(false);
|
}, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (publishPacket.QualityOfServiceLevel == MqttQualityOfServiceLevel.ExactlyOnce)
|
else if (publishPacket.QualityOfServiceLevel == MqttQualityOfServiceLevel.ExactlyOnce)
|
||||||
{
|
{
|
||||||
var reasonCode = await HandleReceivedApplicationMessageAsync(publishPacket).ConfigureAwait(false);
|
var eventArgs = await HandleReceivedApplicationMessageAsync(publishPacket).ConfigureAwait(false);
|
||||||
if (reasonCode != null && Enum.IsDefined(typeof(MqttPubRecReasonCode), reasonCode.Value))
|
|
||||||
|
if (!eventArgs.ProcessingFailed)
|
||||||
{
|
{
|
||||||
await SendAsync(new MqttPubRecPacket
|
await SendAsync(new MqttPubRecPacket
|
||||||
{
|
{
|
||||||
PacketIdentifier = publishPacket.PacketIdentifier,
|
PacketIdentifier = publishPacket.PacketIdentifier,
|
||||||
ReasonCode = (MqttPubRecReasonCode)reasonCode.Value
|
ReasonCode = (MqttPubRecReasonCode)eventArgs.ReasonCode
|
||||||
}, cancellationToken).ConfigureAwait(false);
|
}, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -756,22 +758,18 @@ namespace MQTTnet.Client
|
|||||||
return _adapter.PacketFormatterAdapter.DataConverter.CreatePublishResult(pubRecPacket, pubCompPacket);
|
return _adapter.PacketFormatterAdapter.DataConverter.CreatePublishResult(pubRecPacket, pubCompPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<int?> HandleReceivedApplicationMessageAsync(MqttPublishPacket publishPacket)
|
async Task<MqttApplicationMessageReceivedEventArgs> HandleReceivedApplicationMessageAsync(MqttPublishPacket publishPacket)
|
||||||
{
|
{
|
||||||
int? reasonCode = 0;
|
|
||||||
var applicationMessage = _adapter.PacketFormatterAdapter.DataConverter.CreateApplicationMessage(publishPacket);
|
var applicationMessage = _adapter.PacketFormatterAdapter.DataConverter.CreateApplicationMessage(publishPacket);
|
||||||
|
var eventArgs = new MqttApplicationMessageReceivedEventArgs(Options.ClientId, applicationMessage);
|
||||||
|
|
||||||
var handler = ApplicationMessageReceivedHandler;
|
var handler = ApplicationMessageReceivedHandler;
|
||||||
if (handler != null)
|
if (handler != null)
|
||||||
{
|
{
|
||||||
var eventArgs = new MqttApplicationMessageReceivedEventArgs(Options.ClientId, applicationMessage);
|
|
||||||
await handler.HandleApplicationMessageReceivedAsync(eventArgs).ConfigureAwait(false);
|
await handler.HandleApplicationMessageReceivedAsync(eventArgs).ConfigureAwait(false);
|
||||||
if (eventArgs.ProcessingFailed)
|
|
||||||
{
|
|
||||||
reasonCode = eventArgs.ReasonCode;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return reasonCode;
|
|
||||||
|
return eventArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task WaitForTaskAsync(Task task, Task sender)
|
async Task WaitForTaskAsync(Task task, Task sender)
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using MQTTnet.Protocol;
|
using System;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace MQTTnet
|
namespace MQTTnet
|
||||||
{
|
{
|
||||||
@@ -17,6 +16,6 @@ namespace MQTTnet
|
|||||||
|
|
||||||
public bool ProcessingFailed { get; set; }
|
public bool ProcessingFailed { get; set; }
|
||||||
|
|
||||||
public int? ReasonCode { get; set; }
|
public MqttApplicationMessageReceivedReasonCode ReasonCode { get; set; } = MqttApplicationMessageReceivedReasonCode.Success;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace MQTTnet
|
||||||
|
{
|
||||||
|
public enum MqttApplicationMessageReceivedReasonCode
|
||||||
|
{
|
||||||
|
Success = 0,
|
||||||
|
NoMatchingSubscribers = 16,
|
||||||
|
UnspecifiedError = 128,
|
||||||
|
ImplementationSpecificError = 131,
|
||||||
|
NotAuthorized = 135,
|
||||||
|
TopicNameInvalid = 144,
|
||||||
|
PacketIdentifierInUse = 145,
|
||||||
|
QuotaExceeded = 151,
|
||||||
|
PayloadFormatInvalid = 153
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user