@@ -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
455473void ArduinoIoTCloudTCP::onMessage (int length)
@@ -696,6 +714,7 @@ int ArduinoIoTCloudTCP::updateCertificate(String authorityKeyIdentifier, String
696714 }
697715 return 0 ;
698716}
717+
699718#endif
700719
701720/* *****************************************************************************
0 commit comments