diff --git a/src/TinyMqtt.cpp b/src/TinyMqtt.cpp index e357d3a..b614e3c 100644 --- a/src/TinyMqtt.cpp +++ b/src/TinyMqtt.cpp @@ -55,7 +55,10 @@ MqttClient::MqttClient(MqttBroker* local_broker, TcpClient* new_client) MqttClient::MqttClient(MqttBroker* local_broker, const std::string& id) : local_broker(local_broker), clientId(id) { - if (local_broker) local_broker->addClient(this); + alive = 0; + keep_alive = 0; + + if (local_broker) local_broker->addClient(this); } MqttClient::~MqttClient() @@ -281,7 +284,7 @@ void MqttClient::clientAlive(uint32_t more_seconds) void MqttClient::loop() { - if (alive && (millis() > alive)) + if (keep_alive && (millis() >= alive)) { if (local_broker) { diff --git a/tests/local-tests/local-tests.ino b/tests/local-tests/local-tests.ino index 9d59bb9..252ff8d 100644 --- a/tests/local-tests/local-tests.ino +++ b/tests/local-tests/local-tests.ino @@ -40,6 +40,34 @@ test(local_client_should_unregister_when_destroyed) assertEqual(broker.clientsCount(), (size_t)0); } +test(local_client_do_not_disconnect_after_publishing) +{ + set_millis(0); + MqttBroker broker(1883); + MqttClient client(&broker, "client"); + MqttClient sender(&broker, "sender"); + broker.loop(); + + client.subscribe("#"); + client.subscribe("test"); + client.setCallback(onPublish); + assertEqual(broker.clientsCount(), (size_t)2); + + sender.publish("test", "value"); + broker.loop(); + + add_seconds(60); + client.loop(); + sender.loop(); + broker.loop(); + + assertEqual(broker.clientsCount(), (size_t)2); + assertEqual(sender.connected(), true); + assertEqual(client.connected(), true); + + assertEqual(published.size(), (size_t)1); // client has received something +} + #if 0 test(local_connect) {