Skip to content

Commit 16ad787

Browse files
committed
Simplify Connect/Disconnect Attach/Detach logic
1 parent d8254d0 commit 16ad787

File tree

2 files changed

+13
-29
lines changed

2 files changed

+13
-29
lines changed

src/ArduinoIoTCloudTCP.cpp

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ ArduinoIoTCloudTCP::ArduinoIoTCloudTCP()
8787
, _shadowTopicIn("")
8888
, _dataTopicOut("")
8989
, _dataTopicIn("")
90-
, _deviceSubscribedToThing{false}
9190
#if OTA_ENABLED
9291
, _ota_cap{false}
9392
, _ota_error{static_cast<int>(OTAError::None)}
@@ -376,16 +375,13 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeDeviceTopic()
376375
if (!_mqttClient.subscribe(_deviceTopicIn))
377376
{
378377
DEBUG_ERROR("ArduinoIoTCloudTCP::%s could not subscribe to %s", __FUNCTION__, _deviceTopicIn.c_str());
379-
return State::SubscribeDeviceTopic;
380378
}
381379

382380
if (_last_device_subscribe_cnt > AIOT_CONFIG_LASTVALUES_SYNC_MAX_RETRY_CNT)
383381
{
384382
_last_device_subscribe_cnt = 0;
385383
_next_device_subscribe_attempt_tick = 0;
386-
_mqttClient.stop();
387-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
388-
return State::ConnectPhy;
384+
return State::Disconnect;
389385
}
390386

391387
/* No device configuration reply. Wait: 5s -> 10s -> 20s -> 30s */
@@ -428,16 +424,6 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_CheckDeviceConfig()
428424
return State::Disconnect;
429425
}
430426

431-
if(_deviceSubscribedToThing == true)
432-
{
433-
/* Unsubscribe from old things topics and go on with a new subscription */
434-
_mqttClient.unsubscribe(_shadowTopicIn);
435-
_mqttClient.unsubscribe(_dataTopicIn);
436-
_deviceSubscribedToThing = false;
437-
DEBUG_INFO("Disconnected from Arduino IoT Cloud");
438-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
439-
}
440-
441427
updateThingTopics();
442428

443429
if (_thing_id.length() == 0)
@@ -465,7 +451,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeThingTopics()
465451

466452
if (_thing_id_property->isDifferentFromCloud())
467453
{
468-
return State::CheckDeviceConfig;
454+
return State::Disconnect;
469455
}
470456

471457
unsigned long const now = millis();
@@ -481,9 +467,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeThingTopics()
481467
{
482468
_last_subscribe_request_cnt = 0;
483469
_last_subscribe_request_tick = 0;
484-
_mqttClient.stop();
485-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
486-
return State::ConnectPhy;
470+
return State::Disconnect;
487471
}
488472

489473
_last_subscribe_request_tick = now;
@@ -506,7 +490,6 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeThingTopics()
506490
DEBUG_INFO("Connected to Arduino IoT Cloud");
507491
DEBUG_INFO("Thing ID: %s", getThingId().c_str());
508492
execCloudEventCallback(ArduinoIoTCloudEvent::CONNECT);
509-
_deviceSubscribedToThing = true;
510493

511494
/*Add retry wait time otherwise we are trying to reconnect every 250 ms...*/
512495
return State::RequestLastValues;
@@ -521,7 +504,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_RequestLastValues()
521504

522505
if (_thing_id_property->isDifferentFromCloud())
523506
{
524-
return State::CheckDeviceConfig;
507+
return State::Disconnect;
525508
}
526509

527510
/* Check whether or not we need to send a new request. */
@@ -542,9 +525,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_RequestLastValues()
542525
{
543526
_last_sync_request_cnt = 0;
544527
_last_sync_request_tick = 0;
545-
_mqttClient.stop();
546-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
547-
return State::ConnectPhy;
528+
return State::Disconnect;
548529
}
549530
}
550531

@@ -564,7 +545,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Connected()
564545
{
565546
if (_thing_id_property->isDifferentFromCloud())
566547
{
567-
return State::CheckDeviceConfig;
548+
return State::Disconnect;
568549
}
569550

570551
/* Check if a primitive property wrapper is locally changed.
@@ -641,9 +622,14 @@ void ArduinoIoTCloudTCP::handle_OTARequest() {
641622

642623
ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Disconnect()
643624
{
644-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
625+
if (!_mqttClient.connected()) {
626+
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
627+
} else {
628+
_mqttClient.unsubscribe(_shadowTopicIn);
629+
_mqttClient.unsubscribe(_dataTopicIn);
630+
_mqttClient.stop();
631+
}
645632
DEBUG_INFO("Disconnected from Arduino IoT Cloud");
646-
_mqttClient.stop();
647633
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
648634
return State::ConnectPhy;
649635
}

src/ArduinoIoTCloudTCP.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,6 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
179179
String _dataTopicOut;
180180
String _dataTopicIn;
181181

182-
bool _deviceSubscribedToThing;
183-
184182
#if OTA_ENABLED
185183
bool _ota_cap;
186184
int _ota_error;

0 commit comments

Comments
 (0)