Skip to content

Commit 978f88b

Browse files
committed
Move thing_id outdated flag check outside update function and add handle_Disconnect() function
1 parent def8556 commit 978f88b

File tree

3 files changed

+39
-41
lines changed

3 files changed

+39
-41
lines changed

src/ArduinoIoTCloud.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ ArduinoIoTCloudClass::ArduinoIoTCloudClass()
3333
, _thing_id{""}
3434
, _device_id{""}
3535
, _cloud_event_callback{nullptr}
36+
, _thing_id_outdated{false}
3637
{
3738

3839
}

src/ArduinoIoTCloudTCP.cpp

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -332,12 +332,6 @@ void ArduinoIoTCloudTCP::update()
332332
_next_state = State::Invalid;
333333
}
334334

335-
if(getThingIdOutdatedFlag()) {
336-
DEBUG_VERBOSE("ArduinoIoTCloudTCP::%s Thing id outdated, reconfiguring...", __FUNCTION__);
337-
if (_mqttClient.connected())
338-
_state = State::CheckDeviceConfig;
339-
}
340-
341335
/* Run through the state machine. */
342336
State next_state = _state;
343337
switch (_state)
@@ -352,6 +346,7 @@ void ArduinoIoTCloudTCP::update()
352346
case State::SubscribeThingTopics: next_state = handle_SubscribeThingTopics(); break;
353347
case State::RequestLastValues: next_state = handle_RequestLastValues(); break;
354348
case State::Connected: next_state = handle_Connected(); break;
349+
case State::Disconnect: next_state = handle_Disconnect(); break;
355350
}
356351
_state = next_state;
357352

@@ -427,10 +422,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SendDeviceProperties()
427422
{
428423
if (!_mqttClient.connected())
429424
{
430-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
431-
_mqttClient.stop();
432-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
433-
return State::ConnectPhy;
425+
return State::Disconnect;
434426
}
435427

436428
#if OTA_ENABLED
@@ -443,10 +435,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeDeviceTopic()
443435
{
444436
if (!_mqttClient.connected())
445437
{
446-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
447-
_mqttClient.stop();
448-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
449-
return State::ConnectPhy;
438+
return State::Disconnect;
450439
}
451440

452441
if (!_mqttClient.subscribe(_deviceTopicIn))
@@ -475,10 +464,12 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_WaitDeviceConfig()
475464
{
476465
if (!_mqttClient.connected())
477466
{
478-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
479-
_mqttClient.stop();
480-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
481-
return State::ConnectPhy;
467+
return State::Disconnect;
468+
}
469+
470+
if (getThingIdOutdatedFlag())
471+
{
472+
return State::CheckDeviceConfig;
482473
}
483474

484475
if (millis() > _next_device_subscribe_attempt_tick)
@@ -496,10 +487,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_CheckDeviceConfig()
496487
{
497488
if (!_mqttClient.connected())
498489
{
499-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
500-
_mqttClient.stop();
501-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
502-
return State::ConnectPhy;
490+
return State::Disconnect;
503491
}
504492

505493
if(_deviceSubscribedToThing == true)
@@ -534,10 +522,12 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeThingTopics()
534522
{
535523
if (!_mqttClient.connected())
536524
{
537-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
538-
_mqttClient.stop();
539-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
540-
return State::ConnectPhy;
525+
return State::Disconnect;
526+
}
527+
528+
if (getThingIdOutdatedFlag())
529+
{
530+
return State::CheckDeviceConfig;
541531
}
542532

543533
if (!_mqttClient.subscribe(_dataTopicIn))
@@ -569,10 +559,12 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_RequestLastValues()
569559
{
570560
if (!_mqttClient.connected())
571561
{
572-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
573-
_mqttClient.stop();
574-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
575-
return State::ConnectPhy;
562+
return State::Disconnect;
563+
}
564+
565+
if (getThingIdOutdatedFlag())
566+
{
567+
return State::CheckDeviceConfig;
576568
}
577569

578570
/* Check whether or not we need to send a new request. */
@@ -606,22 +598,18 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Connected()
606598
{
607599
if (!_mqttClient.connected())
608600
{
609-
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
610-
611-
/* Forcefully disconnect MQTT client and trigger a reconnection. */
612-
_mqttClient.stop();
613-
614601
/* The last message was definitely lost, trigger a retransmit. */
615602
_mqtt_data_request_retransmit = true;
616-
617-
/* We are not connected anymore, trigger the callback for a disconnected event. */
618-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
619-
620-
return State::ConnectPhy;
603+
return State::Disconnect;
621604
}
622605
/* We are connected so let's to our stuff here. */
623606
else
624607
{
608+
if (getThingIdOutdatedFlag())
609+
{
610+
return State::CheckDeviceConfig;
611+
}
612+
625613
/* Check if a primitive property wrapper is locally changed.
626614
* This function requires an existing time service which in
627615
* turn requires an established connection. Not having that
@@ -675,6 +663,14 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Connected()
675663
}
676664
}
677665

666+
ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Disconnect()
667+
{
668+
DEBUG_ERROR("ArduinoIoTCloudTCP::%s MQTT client connection lost", __FUNCTION__);
669+
_mqttClient.stop();
670+
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
671+
return State::ConnectPhy;
672+
}
673+
678674
void ArduinoIoTCloudTCP::onMessage(int length)
679675
{
680676
ArduinoCloud.handleMessage(length);

src/ArduinoIoTCloudTCP.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
112112
SubscribeThingTopics,
113113
RequestLastValues,
114114
Connected,
115+
Disconnect,
115116
Invalid
116117
};
117118

@@ -179,6 +180,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
179180
State handle_SubscribeThingTopics();
180181
State handle_RequestLastValues();
181182
State handle_Connected();
183+
State handle_Disconnect();
182184

183185
static void onMessage(int length);
184186
void handleMessage(int length);
@@ -193,7 +195,6 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
193195
#endif
194196

195197
void updateThingTopics();
196-
197198
};
198199

199200
/******************************************************************************

0 commit comments

Comments
 (0)