From 521715e011399811572eec82959f005647f2a289 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Wed, 18 Jul 2018 21:32:46 +0900 Subject: [PATCH] Bugfix of #122 Signed-off-by: tomoaki --- .../src/MQTTSNGWConnectionHandler.cpp | 27 ++++++++++++------- MQTTSNGateway/src/MQTTSNGWConnectionHandler.h | 2 ++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/MQTTSNGateway/src/MQTTSNGWConnectionHandler.cpp b/MQTTSNGateway/src/MQTTSNGWConnectionHandler.cpp index d9fab69..721003b 100644 --- a/MQTTSNGateway/src/MQTTSNGWConnectionHandler.cpp +++ b/MQTTSNGateway/src/MQTTSNGWConnectionHandler.cpp @@ -82,6 +82,8 @@ void MQTTSNConnectionHandler::handleConnect(Client* client, MQTTSNPacket* packet Event* ev = new Event(); ev->setClientSendEvent(client, packet); _gateway->getClientSendQue()->post(ev); + + sendStoredPublish(client); return; } @@ -272,15 +274,7 @@ void MQTTSNConnectionHandler::handlePingreq(Client* client, MQTTSNPacket* packet if ( ( client->isSleep() || client->isAwake() ) && client->getClientSleepPacket() ) { - while ( ( msg = client->getClientSleepPacket() ) != 0 ) - { - // ToDo: This version can't re-send PUBLISH when PUBACK is not returned. - client->deleteFirstClientSleepPacket(); // pop the que to delete element. - - Event* ev = new Event(); - ev->setBrokerRecvEvent(client, msg); - _gateway->getPacketEventQue()->post(ev); - } + sendStoredPublish(client); client->holdPingRequest(); } else @@ -294,3 +288,18 @@ void MQTTSNConnectionHandler::handlePingreq(Client* client, MQTTSNPacket* packet _gateway->getBrokerSendQue()->post(evt); } } + +void MQTTSNConnectionHandler::sendStoredPublish(Client* client) +{ + MQTTGWPacket* msg = 0; + + while ( ( msg = client->getClientSleepPacket() ) != 0 ) + { + // ToDo: This version can't re-send PUBLISH when PUBACK is not returned. + client->deleteFirstClientSleepPacket(); // pop the que to delete element. + + Event* ev = new Event(); + ev->setBrokerRecvEvent(client, msg); + _gateway->getPacketEventQue()->post(ev); + } +} diff --git a/MQTTSNGateway/src/MQTTSNGWConnectionHandler.h b/MQTTSNGateway/src/MQTTSNGWConnectionHandler.h index 044e766..adf92d4 100644 --- a/MQTTSNGateway/src/MQTTSNGWConnectionHandler.h +++ b/MQTTSNGateway/src/MQTTSNGWConnectionHandler.h @@ -37,6 +37,8 @@ public: void handleWillmsgupd(Client* client, MQTTSNPacket* packet); void handlePingreq(Client* client, MQTTSNPacket* packet); private: + void sendStoredPublish(Client* client); + char _pbuf[MQTTSNGW_MAX_PACKET_SIZE * 3]; Gateway* _gateway; };