@@ -46,6 +46,7 @@ int ArduinoIoTCloudClass::begin(ConnectionManager *c, String brokerAddress)
4646int ArduinoIoTCloudClass::begin (Client& net, String brokerAddress)
4747{
4848
49+ _net = &net;
4950 // store the broker address as class member
5051 _brokerAddress = brokerAddress;
5152
@@ -80,15 +81,19 @@ int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress)
8081 if (connection != NULL ){
8182 _bearSslClient = new BearSSLClient (connection->getClient ());
8283 }else {
83- _bearSslClient = new BearSSLClient (net );
84+ _bearSslClient = new BearSSLClient (*_net );
8485 }
8586
8687 _bearSslClient->setEccSlot (keySlot, ECCX08Cert.bytes (), ECCX08Cert.length ());
8788 _mqttClient = new MqttClient (*_bearSslClient);
8889
8990 // Bind ArduinoBearSSL callback using static "non-method" function
90- getTimeConnection = connection;
91- ArduinoBearSSL.onGetTime (getTime);
91+ if (connection != NULL ){
92+ getTimeConnection = connection;
93+ ArduinoBearSSL.onGetTime (getTime);
94+ }
95+
96+
9297 // TODO: Find a better way to allow callback into object method
9398
9499 // Begin function for the MQTTClient
@@ -99,6 +104,11 @@ int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress)
99104 return 1 ;
100105}
101106
107+ void ArduinoIoTCloudClass::onGetTime (unsigned long (*callback)(void ))
108+ {
109+ ArduinoBearSSL.onGetTime (callback);
110+ }
111+
102112// private class method used to initialize mqttClient class member. (called in the begin class method)
103113void ArduinoIoTCloudClass::mqttClientBegin ()
104114{
@@ -197,7 +207,7 @@ void ArduinoIoTCloudClass::update(int const reconnectionMaxRetries, int const re
197207 }
198208}
199209
200- int ArduinoIoTCloudClass::reconnect ()
210+ int ArduinoIoTCloudClass::reconnect (Client& /* net */ )
201211{
202212 if (_mqttClient->connected ()) {
203213 _mqttClient->stop ();
@@ -285,13 +295,20 @@ void ArduinoIoTCloudClass::connectionCheck() {
285295
286296 switch (iotStatus) {
287297 case IOT_STATUS_IDLE:
288- if (!begin (connection)) {
289- debugMessage (" Error Starting Arduino Cloud\n Trying again in a few seconds" , 0 );
290- iotStatus = IOT_STATUS_CLOUD_ERROR;
291- return ;
298+ if (connection == NULL ){
299+ if (!begin (*_net)){
300+ debugMessage (" Error Starting Arduino Cloud\n Trying again in a few seconds" , 0 );
301+ iotStatus = IOT_STATUS_CLOUD_ERROR;
302+ return ;
303+ }
304+ }else {
305+ if (!begin (connection)) {
306+ debugMessage (" Error Starting Arduino Cloud\n Trying again in a few seconds" , 0 );
307+ iotStatus = IOT_STATUS_CLOUD_ERROR;
308+ return ;
309+ }
292310 }
293- // TODO: Controlla bene che non serva
294- // ArduinoCloud.onGetTime(getTime);
311+
295312 iotStatus = IOT_STATUS_CLOUD_CONNECTING;
296313 break ;
297314 case IOT_STATUS_CLOUD_ERROR:
@@ -306,7 +323,7 @@ void ArduinoIoTCloudClass::connectionCheck() {
306323 case IOT_STATUS_CLOUD_RECONNECTING:
307324 debugMessage (" IoT Cloud reconnecting..." , 1 );
308325 // wifiClient.stop();
309- arduinoIoTConnectionAttempt = reconnect ();
326+ arduinoIoTConnectionAttempt = reconnect (*_net );
310327 *msgBuffer = 0 ;
311328 sprintf (msgBuffer, " ArduinoCloud.reconnect(): %d" , arduinoIoTConnectionAttempt);
312329 debugMessage (msgBuffer, 1 );
0 commit comments