mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-13 15:36:51 +01:00
@@ -82,6 +82,8 @@ void MQTTSNConnectionHandler::handleConnect(Client* client, MQTTSNPacket* packet
|
|||||||
Event* ev = new Event();
|
Event* ev = new Event();
|
||||||
ev->setClientSendEvent(client, packet);
|
ev->setClientSendEvent(client, packet);
|
||||||
_gateway->getClientSendQue()->post(ev);
|
_gateway->getClientSendQue()->post(ev);
|
||||||
|
|
||||||
|
sendStoredPublish(client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,15 +274,7 @@ void MQTTSNConnectionHandler::handlePingreq(Client* client, MQTTSNPacket* packet
|
|||||||
|
|
||||||
if ( ( client->isSleep() || client->isAwake() ) && client->getClientSleepPacket() )
|
if ( ( client->isSleep() || client->isAwake() ) && client->getClientSleepPacket() )
|
||||||
{
|
{
|
||||||
while ( ( msg = client->getClientSleepPacket() ) != 0 )
|
sendStoredPublish(client);
|
||||||
{
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
client->holdPingRequest();
|
client->holdPingRequest();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -294,3 +288,18 @@ void MQTTSNConnectionHandler::handlePingreq(Client* client, MQTTSNPacket* packet
|
|||||||
_gateway->getBrokerSendQue()->post(evt);
|
_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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ public:
|
|||||||
void handleWillmsgupd(Client* client, MQTTSNPacket* packet);
|
void handleWillmsgupd(Client* client, MQTTSNPacket* packet);
|
||||||
void handlePingreq(Client* client, MQTTSNPacket* packet);
|
void handlePingreq(Client* client, MQTTSNPacket* packet);
|
||||||
private:
|
private:
|
||||||
|
void sendStoredPublish(Client* client);
|
||||||
|
|
||||||
char _pbuf[MQTTSNGW_MAX_PACKET_SIZE * 3];
|
char _pbuf[MQTTSNGW_MAX_PACKET_SIZE * 3];
|
||||||
Gateway* _gateway;
|
Gateway* _gateway;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user