Skip to content

Commit bd3fd1f

Browse files
committed
add disconnect method
1 parent 4083b9d commit bd3fd1f

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

Diff for: src/ArduinoIoTCloud.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class ArduinoIoTCloudClass
8888
virtual void update () = 0;
8989
virtual int connected () = 0;
9090
virtual void printDebugInfo() = 0;
91-
91+
virtual void disconnect () { }
9292
void push();
9393
bool setTimestamp(String const & prop_name, unsigned long const timestamp);
9494

Diff for: src/ArduinoIoTCloudTCP.cpp

+25-6
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ ArduinoIoTCloudTCP::ArduinoIoTCloudTCP()
7979
* PUBLIC MEMBER FUNCTIONS
8080
******************************************************************************/
8181

82-
int ArduinoIoTCloudTCP::begin(ConnectionHandler & connection, bool const enable_watchdog, String brokerAddress, uint16_t brokerPort)
82+
int ArduinoIoTCloudTCP::begin(ConnectionHandler & connection, bool const enable_watchdog, String brokerAddress, uint16_t brokerPort, bool auto_reconnect)
8383
{
8484
_connection = &connection;
8585
_brokerAddress = brokerAddress;
@@ -135,14 +135,17 @@ int ArduinoIoTCloudTCP::begin(ConnectionHandler & connection, bool const enable_
135135

136136
/* Setup retry timers */
137137
_connection_attempt.begin(AIOT_CONFIG_RECONNECTION_RETRY_DELAY_ms, AIOT_CONFIG_MAX_RECONNECTION_RETRY_DELAY_ms);
138-
return begin(enable_watchdog, _brokerAddress, _brokerPort);
138+
return begin(enable_watchdog, _brokerAddress, _brokerPort, auto_reconnect);
139139
}
140140

141-
int ArduinoIoTCloudTCP::begin(bool const enable_watchdog, String brokerAddress, uint16_t brokerPort)
141+
int ArduinoIoTCloudTCP::begin(bool const enable_watchdog, String brokerAddress, uint16_t brokerPort, bool auto_reconnect)
142142
{
143143
_enable_watchdog = enable_watchdog;
144144
_brokerAddress = brokerAddress;
145145
_brokerPort = brokerPort;
146+
_auto_reconnect = auto_reconnect;
147+
148+
_state = State::ConfigPhy;
146149

147150
_mqttClient.setClient(_brokerClient);
148151

@@ -214,6 +217,7 @@ void ArduinoIoTCloudTCP::update()
214217
case State::ConnectMqttBroker: next_state = handle_ConnectMqttBroker(); break;
215218
case State::Connected: next_state = handle_Connected(); break;
216219
case State::Disconnect: next_state = handle_Disconnect(); break;
220+
case State::Disconnected: break;
217221
}
218222

219223
_state = next_state;
@@ -271,6 +275,16 @@ void ArduinoIoTCloudTCP::printDebugInfo()
271275
DEBUG_INFO("MQTT Broker: %s:%d", _brokerAddress.c_str(), _brokerPort);
272276
}
273277

278+
void ArduinoIoTCloudTCP::disconnect() {
279+
if (_state == State::ConfigPhy || _state == State::Init) {
280+
return;
281+
}
282+
283+
_mqttClient.stop();
284+
_auto_reconnect = false;
285+
_state = State::Disconnect;
286+
}
287+
274288
/******************************************************************************
275289
* PRIVATE MEMBER FUNCTIONS
276290
******************************************************************************/
@@ -436,9 +450,13 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Disconnect()
436450
DEBUG_INFO("Disconnected from Arduino IoT Cloud");
437451
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
438452

439-
/* Setup timer for broker connection and restart */
440-
_connection_attempt.begin(AIOT_CONFIG_RECONNECTION_RETRY_DELAY_ms, AIOT_CONFIG_MAX_RECONNECTION_RETRY_DELAY_ms);
441-
return State::ConnectPhy;
453+
if(_auto_reconnect) {
454+
/* Setup timer for broker connection and restart */
455+
_connection_attempt.begin(AIOT_CONFIG_RECONNECTION_RETRY_DELAY_ms, AIOT_CONFIG_MAX_RECONNECTION_RETRY_DELAY_ms);
456+
return State::ConnectPhy;
457+
}
458+
459+
return State::Disconnected;
442460
}
443461

444462
void ArduinoIoTCloudTCP::onMessage(int length)
@@ -685,6 +703,7 @@ int ArduinoIoTCloudTCP::updateCertificate(String authorityKeyIdentifier, String
685703
}
686704
return 0;
687705
}
706+
688707
#endif
689708

690709
/******************************************************************************

Diff for: src/ArduinoIoTCloudTCP.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,10 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
7272
virtual void update () override;
7373
virtual int connected () override;
7474
virtual void printDebugInfo() override;
75+
virtual void disconnect () override;
7576

76-
int begin(ConnectionHandler & connection, bool const enable_watchdog = true, String brokerAddress = DEFAULT_BROKER_ADDRESS, uint16_t brokerPort = DEFAULT_BROKER_PORT_AUTO);
77-
int begin(bool const enable_watchdog = true, String brokerAddress = DEFAULT_BROKER_ADDRESS, uint16_t brokerPort = DEFAULT_BROKER_PORT_AUTO);
77+
int begin(ConnectionHandler & connection, bool const enable_watchdog = true, String brokerAddress = DEFAULT_BROKER_ADDRESS, uint16_t brokerPort = DEFAULT_BROKER_PORT_AUTO, bool auto_reconnect = true);
78+
int begin(bool const enable_watchdog = true, String brokerAddress = DEFAULT_BROKER_ADDRESS, uint16_t brokerPort = DEFAULT_BROKER_PORT_AUTO, bool auto_reconnect = true);
7879

7980
#if defined(BOARD_HAS_SECURE_ELEMENT)
8081
int updateCertificate(String authorityKeyIdentifier, String serialNumber, String notBefore, String notAfter, String signature);
@@ -128,6 +129,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
128129
ConnectMqttBroker,
129130
Connected,
130131
Disconnect,
132+
Disconnected,
131133
};
132134

133135
State _state;
@@ -143,6 +145,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
143145
int _mqtt_data_len;
144146
bool _mqtt_data_request_retransmit;
145147
bool _enable_watchdog;
148+
bool _auto_reconnect;
146149

147150
#if defined(BOARD_HAS_SECRET_KEY)
148151
String _password;

0 commit comments

Comments
 (0)