From 7d9ab6381dc47d1d5ef6d1ed7e9fb99cc922937f Mon Sep 17 00:00:00 2001 From: hsaturn Date: Sun, 28 Mar 2021 21:28:06 +0200 Subject: [PATCH] Disconnect added (finally) --- src/TinyMqtt.cpp | 16 +++++++++++++++- src/TinyMqtt.h | 3 ++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/TinyMqtt.cpp b/src/TinyMqtt.cpp index 2db4871..27cbac2 100644 --- a/src/TinyMqtt.cpp +++ b/src/TinyMqtt.cpp @@ -41,14 +41,20 @@ MqttClient::~MqttClient() { close(); delete client; + Serial << "Client deleted" << endl; } -void MqttClient::close() +void MqttClient::close(bool bSendDisconnect) { debug("close " << id().c_str()); mqtt_connected = false; if (client) { + if (bSendDisconnect and client->connected()) + { + message.create(MqttMessage::Type::Disconnect); + message.sendTo(this); + } client->stop(); } @@ -452,6 +458,14 @@ if (message.type() != MqttMessage::Type::PingReq && message.type() != MqttMessag } break; + case MqttMessage::Type::Disconnect: + // TODO should discard any will message + if (!mqtt_connected) break; + mqtt_connected = false; + close(false); + bclose=false; + break; + default: bclose=true; break; diff --git a/src/TinyMqtt.h b/src/TinyMqtt.h index 9661162..2a07a7f 100644 --- a/src/TinyMqtt.h +++ b/src/TinyMqtt.h @@ -49,6 +49,7 @@ class MqttMessage UnSubscribe = 0xA0, PingReq = 0xC0, PingResp = 0xD0, + Disconnect = 0xE0 }; enum State { @@ -137,7 +138,7 @@ class MqttClient void id(std::string& new_id) { clientId = new_id; } void loop(); - void close(); + void close(bool bSendDisconnect=true); void setCallback(CallBack fun) {callback=fun; }; // Publish from client to the world