From cb00d7f82abf6f77e3dc7a33f036367245da3e16 Mon Sep 17 00:00:00 2001 From: hsaturn Date: Sat, 27 Mar 2021 01:39:37 +0100 Subject: [PATCH] MqttClient / UnSubscribe message implemented --- src/TinyMqtt.cpp | 11 ++++++++++- src/TinyMqtt.h | 19 ++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/TinyMqtt.cpp b/src/TinyMqtt.cpp index b08af3e..f82b527 100644 --- a/src/TinyMqtt.cpp +++ b/src/TinyMqtt.cpp @@ -373,6 +373,7 @@ if (message.type() != MqttMessage::Type::PingReq && message.type() != MqttMessag break; case MqttMessage::Type::Subscribe: + case MqttMessage::Type::UnSubscribe: { if (!mqtt_connected) break; payload = header+2; @@ -384,7 +385,15 @@ if (message.type() != MqttMessage::Type::PingReq && message.type() != MqttMessag debug( " topic (" << std::string(payload, len) << ')'); outstring("Subscribes", payload, len); // subscribe(Topic(payload, len)); - subscriptions.insert(Topic(payload, len)); + Topic topic(payload, len); + if ((message.type() & 0XF0) == MqttMessage::Type::Subscribe) + subscriptions.insert(topic); + else + { + auto it=subscriptions.find(topic); + if (it != subscriptions.end()) + subscriptions.erase(it); + } payload += len; uint8_t qos = *payload++; debug(" qos=" << qos); diff --git a/src/TinyMqtt.h b/src/TinyMqtt.h index 17e68b3..9661162 100644 --- a/src/TinyMqtt.h +++ b/src/TinyMqtt.h @@ -39,15 +39,16 @@ class MqttMessage public: enum Type { - Unknown = 0, - Connect = 0x10, - ConnAck = 0x20, - Publish = 0x30, - PubAck = 0x40, - Subscribe = 0x80, - SubAck = 0x90, - PingReq = 0xC0, - PingResp = 0xD0, + Unknown = 0, + Connect = 0x10, + ConnAck = 0x20, + Publish = 0x30, + PubAck = 0x40, + Subscribe = 0x80, + SubAck = 0x90, + UnSubscribe = 0xA0, + PingReq = 0xC0, + PingResp = 0xD0, }; enum State {