From 1f9241b260e8a611c09594b20a6494230d84818b Mon Sep 17 00:00:00 2001 From: tomoaki Date: Mon, 12 Oct 2020 17:30:11 +0900 Subject: [PATCH] Bugfix of DISCONNECT and ClientSend error message Close the Connection after sending DISCONNECT. Separate multicast error message. Signed-off-by: tomoaki --- MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp | 7 ++- MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp | 55 ++++++++++++-------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp b/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp index 4f58359..d8211e6 100644 --- a/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp @@ -41,7 +41,7 @@ BrokerSendTask::BrokerSendTask(Gateway* gateway) BrokerSendTask::~BrokerSendTask() { - + WRITELOG("BrokerSendTask is deleted normally.\r\n"); } /** @@ -121,6 +121,11 @@ void BrokerSendTask::run() { client->connectSended(); } + else if ( packet->getType() == DISCONNECT ) + { + client->getNetwork()->close(); + client->disconnected(); + } log(client, packet); } else diff --git a/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp b/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp index 0a5e06e..cd45b1d 100644 --- a/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp @@ -35,7 +35,7 @@ ClientSendTask::ClientSendTask(Gateway* gateway) ClientSendTask::~ClientSendTask() { - + WRITELOG("ClientSendTask is deleted normally.\r\n"); } void ClientSendTask::run() @@ -49,35 +49,44 @@ void ClientSendTask::run() { Event* ev = _gateway->getClientSendQue()->wait(); - if (ev->getEventType() == EtStop) + if (ev->getEventType() == EtStop || _gateway->IsStopping() ) { WRITELOG("\n%s ClientSendTask stopped.", currentDateTime()); delete ev; break; } - if (ev->getEventType() == EtClientSend) - { - client = ev->getClient(); - packet = ev->getMQTTSNPacket(); - rc = adpMgr->unicastToClient(client, packet, this); - } - else if (ev->getEventType() == EtBroadcast) - { - packet = ev->getMQTTSNPacket(); - log(client, packet); - rc = packet->broadcast(_sensorNetwork); - } - else if (ev->getEventType() == EtSensornetSend) - { - packet = ev->getMQTTSNPacket(); - log(client, packet); - rc = packet->unicast(_sensorNetwork, ev->getSensorNetAddress()); - } - if ( rc < 0 ) + if (ev->getEventType() == EtBroadcast) { - WRITELOG("%s ClientSendTask can't send a packet to the client %s. Error=%d%s\n", - ERRMSG_HEADER, (client ? (const char*)client->getClientId() : UNKNOWNCL ), errno, ERRMSG_FOOTER); + packet = ev->getMQTTSNPacket(); + log(client, packet); + + if ( packet->broadcast(_sensorNetwork) < 0 ) + { + WRITELOG("%s ClientSendTask can't multicast a packet Error=%d%s\n", + ERRMSG_HEADER, errno, ERRMSG_FOOTER); + } + } + else + { + if (ev->getEventType() == EtClientSend) + { + client = ev->getClient(); + packet = ev->getMQTTSNPacket(); + rc = adpMgr->unicastToClient(client, packet, this); + } + else if (ev->getEventType() == EtSensornetSend) + { + packet = ev->getMQTTSNPacket(); + log(client, packet); + rc = packet->unicast(_sensorNetwork, ev->getSensorNetAddress()); + } + + if ( rc < 0 ) + { + WRITELOG("%s ClientSendTask can't send a packet to the client %s. Error=%d%s\n", + ERRMSG_HEADER, (client ? (const char*)client->getClientId() : UNKNOWNCL ), errno, ERRMSG_FOOTER); + } } delete ev; }