@@ -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;
@@ -273,6 +277,16 @@ void ArduinoIoTCloudTCP::printDebugInfo()
273277 DEBUG_INFO (" MQTT Broker: %s:%d" , _brokerAddress.c_str (), _brokerPort);
274278}
275279
280+ void ArduinoIoTCloudTCP::disconnect () {
281+ if (_state == State::ConfigPhy || _state == State::Init) {
282+ return ;
283+ }
284+
285+ _mqttClient.stop ();
286+ _auto_reconnect = false ;
287+ _state = State::Disconnect;
288+ }
289+
276290/* *****************************************************************************
277291 * PRIVATE MEMBER FUNCTIONS
278292 ******************************************************************************/
@@ -431,9 +445,13 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Disconnect()
431445 DEBUG_INFO (" Disconnected from Arduino IoT Cloud" );
432446 execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
433447
434- /* Setup timer for broker connection and restart */
435- _connection_attempt.begin (AIOT_CONFIG_RECONNECTION_RETRY_DELAY_ms, AIOT_CONFIG_MAX_RECONNECTION_RETRY_DELAY_ms);
436- return State::ConnectPhy;
448+ if (_auto_reconnect) {
449+ /* Setup timer for broker connection and restart */
450+ _connection_attempt.begin (AIOT_CONFIG_RECONNECTION_RETRY_DELAY_ms, AIOT_CONFIG_MAX_RECONNECTION_RETRY_DELAY_ms);
451+ return State::ConnectPhy;
452+ }
453+
454+ return State::Disconnected;
437455}
438456
439457void ArduinoIoTCloudTCP::onMessage (int length)
@@ -680,6 +698,7 @@ int ArduinoIoTCloudTCP::updateCertificate(String authorityKeyIdentifier, String
680698 }
681699 return 0 ;
682700}
701+
683702#endif
684703
685704/* *****************************************************************************
0 commit comments