Disconnect added (finally)

This commit is contained in:
hsaturn
2021-03-28 21:28:06 +02:00
parent 470cde62da
commit 7d9ab6381d
2 changed files with 17 additions and 2 deletions

View File

@@ -41,14 +41,20 @@ MqttClient::~MqttClient()
{ {
close(); close();
delete client; delete client;
Serial << "Client deleted" << endl;
} }
void MqttClient::close() void MqttClient::close(bool bSendDisconnect)
{ {
debug("close " << id().c_str()); debug("close " << id().c_str());
mqtt_connected = false; mqtt_connected = false;
if (client) if (client)
{ {
if (bSendDisconnect and client->connected())
{
message.create(MqttMessage::Type::Disconnect);
message.sendTo(this);
}
client->stop(); client->stop();
} }
@@ -452,6 +458,14 @@ if (message.type() != MqttMessage::Type::PingReq && message.type() != MqttMessag
} }
break; break;
case MqttMessage::Type::Disconnect:
// TODO should discard any will message
if (!mqtt_connected) break;
mqtt_connected = false;
close(false);
bclose=false;
break;
default: default:
bclose=true; bclose=true;
break; break;

View File

@@ -49,6 +49,7 @@ class MqttMessage
UnSubscribe = 0xA0, UnSubscribe = 0xA0,
PingReq = 0xC0, PingReq = 0xC0,
PingResp = 0xD0, PingResp = 0xD0,
Disconnect = 0xE0
}; };
enum State enum State
{ {
@@ -137,7 +138,7 @@ class MqttClient
void id(std::string& new_id) { clientId = new_id; } void id(std::string& new_id) { clientId = new_id; }
void loop(); void loop();
void close(); void close(bool bSendDisconnect=true);
void setCallback(CallBack fun) {callback=fun; }; void setCallback(CallBack fun) {callback=fun; };
// Publish from client to the world // Publish from client to the world