Skip to content

Commit 993dddb

Browse files
committed
Implementing state transition logic which simplifies the specific state handling code analog to the TCP version
1 parent 45a2847 commit 993dddb

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

src/ArduinoIoTCloudLPWAN.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,37 +123,34 @@ int ArduinoIoTCloudLPWAN::writeProperties(const byte data[], int length) {
123123

124124
ArduinoIoTConnectionStatus ArduinoIoTCloudLPWAN::checkCloudConnection()
125125
{
126+
ArduinoIoTConnectionStatus next_iot_status = _iotStatus;
127+
126128
switch (_iotStatus) {
127129
case ArduinoIoTConnectionStatus::IDLE: {
128-
_iotStatus = ArduinoIoTConnectionStatus::CONNECTING;
129-
printConnectionStatus(_iotStatus);
130+
next_iot_status = ArduinoIoTConnectionStatus::CONNECTING;
130131
}
131132
break;
132133
case ArduinoIoTConnectionStatus::ERROR: {
133-
_iotStatus = ArduinoIoTConnectionStatus::RECONNECTING;
134-
printConnectionStatus(_iotStatus);
134+
next_iot_status = ArduinoIoTConnectionStatus::RECONNECTING;
135135
}
136136
break;
137137
case ArduinoIoTConnectionStatus::CONNECTED: {
138138
if (_connection->getStatus() != NetworkConnectionState::CONNECTED) {
139-
_iotStatus = ArduinoIoTConnectionStatus::DISCONNECTED;
140-
printConnectionStatus(_iotStatus);
141-
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
139+
next_iot_status = ArduinoIoTConnectionStatus::DISCONNECTED;
142140
}
143141
}
144142
break;
145143
case ArduinoIoTConnectionStatus::DISCONNECTED: {
146-
_iotStatus = ArduinoIoTConnectionStatus::RECONNECTING;
147-
printConnectionStatus(_iotStatus);
144+
next_iot_status = ArduinoIoTConnectionStatus::RECONNECTING;
148145
}
149146
break;
150147
case ArduinoIoTConnectionStatus::RECONNECTING: {
151148
int const ret_code = connect();
152149
Debug.print(DBG_INFO, "ArduinoCloud.reconnect()");
153150
if (ret_code == 1) {
154-
_iotStatus = ArduinoIoTConnectionStatus::IDLE;
151+
next_iot_status = ArduinoIoTConnectionStatus::IDLE;
155152
} else {
156-
_iotStatus = ArduinoIoTConnectionStatus::ERROR;
153+
next_iot_status = ArduinoIoTConnectionStatus::ERROR;
157154
}
158155

159156
}
@@ -162,15 +159,21 @@ ArduinoIoTConnectionStatus ArduinoIoTCloudLPWAN::checkCloudConnection()
162159
NetworkConnectionState net_status = _connection->getStatus();
163160
Debug.print(DBG_VERBOSE, "ArduinoCloud.connect(): %d", net_status);
164161
if (net_status == NetworkConnectionState::CONNECTED) {
165-
_iotStatus = ArduinoIoTConnectionStatus::CONNECTED;
166-
printConnectionStatus(_iotStatus);
167-
execCloudEventCallback(ArduinoIoTCloudEvent::CONNECT);
162+
next_iot_status = ArduinoIoTConnectionStatus::CONNECTED;
168163
}
169164

170165
}
171166
break;
172167
}
173168

169+
if(next_iot_status != _iotStatus)
170+
{
171+
printConnectionStatus(next_iot_status);
172+
if (next_iot_status == ArduinoIoTConnectionStatus::DISCONNECTED) execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
173+
else if(next_iot_status == ArduinoIoTConnectionStatus::CONNECTED) execCloudEventCallback(ArduinoIoTCloudEvent::CONNECT);
174+
_iotStatus = next_iot_status;
175+
}
176+
174177
return _iotStatus;
175178
}
176179

0 commit comments

Comments
 (0)