From a8434d1b589a9cce15bb75612e1d3dd27ff63dbf Mon Sep 17 00:00:00 2001 From: Christian Kratky Date: Thu, 18 Apr 2019 00:01:22 +0200 Subject: [PATCH] Expose results of publish operations for MQTTv5. --- .../Publishing/MqttClientPublishResult.cs | 7 +++++++ .../Formatter/V5/MqttV500DataConverter.cs | 18 +++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Source/MQTTnet/Client/Publishing/MqttClientPublishResult.cs b/Source/MQTTnet/Client/Publishing/MqttClientPublishResult.cs index 0e508137..5a4b45b0 100644 --- a/Source/MQTTnet/Client/Publishing/MqttClientPublishResult.cs +++ b/Source/MQTTnet/Client/Publishing/MqttClientPublishResult.cs @@ -1,8 +1,15 @@  +using System.Collections.Generic; +using MQTTnet.Packets; + namespace MQTTnet.Client.Publishing { public class MqttClientPublishResult { public MqttClientPublishReasonCode ReasonCode { get; set; } = MqttClientPublishReasonCode.Success; + + public string ReasonString { get; set; } + + public List UserProperties { get; set; } } } diff --git a/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs b/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs index 6b4151a8..2b2d2121 100644 --- a/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs +++ b/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs @@ -191,9 +191,12 @@ namespace MQTTnet.Formatter.V5 { var result = new MqttClientPublishResult { - ReasonCode = (MqttClientPublishReasonCode)pubAckPacket.ReasonCode + // Both enums share the same values. + ReasonCode = (MqttClientPublishReasonCode)pubAckPacket.ReasonCode.Value, + ReasonString = pubAckPacket.Properties?.ReasonString, + UserProperties = pubAckPacket.Properties?.UserProperties }; - + return result; } @@ -207,19 +210,24 @@ namespace MQTTnet.Formatter.V5 }; } + // The PUBCOMP is the last packet in QoS 2. So we use the results from that instead of PUBREC. if (pubCompPacket.ReasonCode == MqttPubCompReasonCode.PacketIdentifierNotFound) { return new MqttClientPublishResult { - ReasonCode = MqttClientPublishReasonCode.UnspecifiedError + ReasonCode = MqttClientPublishReasonCode.UnspecifiedError, + ReasonString = pubCompPacket.Properties?.ReasonString, + UserProperties = pubCompPacket.Properties?.UserProperties }; } var result = new MqttClientPublishResult { - ReasonCode = MqttClientPublishReasonCode.Success + ReasonCode = MqttClientPublishReasonCode.Success, + ReasonString = pubCompPacket.Properties?.ReasonString, + UserProperties = pubCompPacket.Properties?.UserProperties }; - + if (pubRecPacket.ReasonCode.HasValue) { // Both enums share the same values.