Skip to content

Commit e17e558

Browse files
committed
add disconnect method
1 parent d9be38d commit e17e558

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

src/ArduinoIoTCloud.h

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

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

@@ -215,6 +218,7 @@ void ArduinoIoTCloudTCP::update()
215218
case State::ConnectMqttBroker: next_state = handle_ConnectMqttBroker(); break;
216219
case State::Connected: next_state = handle_Connected(); break;
217220
case State::Disconnect: next_state = handle_Disconnect(); break;
221+
case State::Disconnected: break;
218222
}
219223

220224
_state = next_state;
@@ -274,6 +278,16 @@ void ArduinoIoTCloudTCP::printDebugInfo()
274278
DEBUG_INFO("MQTT Broker: %s:%d", _brokerAddress.c_str(), _brokerPort);
275279
}
276280

281+
void ArduinoIoTCloudTCP::disconnect() {
282+
if (_state == State::ConfigPhy || _state == State::Init) {
283+
return;
284+
}
285+
286+
_mqttClient.stop();
287+
_auto_reconnect = false;
288+
_state = State::Disconnect;
289+
}
290+
277291
/******************************************************************************
278292
* PRIVATE MEMBER FUNCTIONS
279293
******************************************************************************/
@@ -447,9 +461,13 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Disconnect()
447461
DEBUG_INFO("Disconnected from Arduino IoT Cloud");
448462
execCloudEventCallback(ArduinoIoTCloudEvent::DISCONNECT);
449463

450-
/* Setup timer for broker connection and restart */
451-
_connection_attempt.begin(AIOT_CONFIG_RECONNECTION_RETRY_DELAY_ms, AIOT_CONFIG_MAX_RECONNECTION_RETRY_DELAY_ms);
452-
return State::ConnectPhy;
464+
if(_auto_reconnect) {
465+
/* Setup timer for broker connection and restart */
466+
_connection_attempt.begin(AIOT_CONFIG_RECONNECTION_RETRY_DELAY_ms, AIOT_CONFIG_MAX_RECONNECTION_RETRY_DELAY_ms);
467+
return State::ConnectPhy;
468+
}
469+
470+
return State::Disconnected;
453471
}
454472

455473
void ArduinoIoTCloudTCP::onMessage(int length)
@@ -696,6 +714,7 @@ int ArduinoIoTCloudTCP::updateCertificate(String authorityKeyIdentifier, String
696714
}
697715
return 0;
698716
}
717+
699718
#endif
700719

701720
/******************************************************************************

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)