diff --git a/src/ArduinoIoTCloud.h b/src/ArduinoIoTCloud.h index ba488fb9d..18258e090 100644 --- a/src/ArduinoIoTCloud.h +++ b/src/ArduinoIoTCloud.h @@ -78,8 +78,6 @@ class ArduinoIoTCloudClass { virtual int connected() = 0; - virtual ArduinoIoTConnectionStatus connectionCheck() = 0; - virtual void printDebugInfo() = 0; inline void setThingId(String const thing_id) { diff --git a/src/ArduinoIoTCloudLPWAN.cpp b/src/ArduinoIoTCloudLPWAN.cpp index 27daa73bb..23f223774 100644 --- a/src/ArduinoIoTCloudLPWAN.cpp +++ b/src/ArduinoIoTCloudLPWAN.cpp @@ -46,7 +46,7 @@ int ArduinoIoTCloudLPWAN::connected() { return state; } -int ArduinoIoTCloudLPWAN::begin(LPWANConnectionHandler& connection, bool retry) { +int ArduinoIoTCloudLPWAN::begin(ConnectionHandler& connection, bool retry) { _connection = &connection; _connection->init(); _retryEnable = retry; diff --git a/src/ArduinoIoTCloudLPWAN.h b/src/ArduinoIoTCloudLPWAN.h index c7bf6fe6b..dd5a8292c 100644 --- a/src/ArduinoIoTCloudLPWAN.h +++ b/src/ArduinoIoTCloudLPWAN.h @@ -33,8 +33,8 @@ class ArduinoIoTCloudLPWAN : public ArduinoIoTCloudClass { void update(); ArduinoIoTConnectionStatus connectionCheck(); void printDebugInfo(); - int begin(LPWANConnectionHandler& connection, bool retry = false); - inline LPWANConnectionHandler* getConnection() { + int begin(ConnectionHandler& connection, bool retry = false); + inline ConnectionHandler* getConnection() { return _connection; } bool isRetryEnabled() { @@ -67,7 +67,7 @@ class ArduinoIoTCloudLPWAN : public ArduinoIoTCloudClass { int writeShadowOut(const byte data[], int length); private: - LPWANConnectionHandler* _connection; + ConnectionHandler* _connection; void sendPropertiesToCloud(); bool _retryEnable; int _maxNumRetry; diff --git a/src/ArduinoIoTCloudTCP.cpp b/src/ArduinoIoTCloudTCP.cpp index 1899fc56c..676c5d2d9 100644 --- a/src/ArduinoIoTCloudTCP.cpp +++ b/src/ArduinoIoTCloudTCP.cpp @@ -75,7 +75,7 @@ ArduinoIoTCloudTCP::~ArduinoIoTCloudTCP() { } } -int ArduinoIoTCloudTCP::begin(TcpIpConnectionHandler & connection, String brokerAddress, uint16_t brokerPort) { +int ArduinoIoTCloudTCP::begin(ConnectionHandler & connection, String brokerAddress, uint16_t brokerPort) { _connection = &connection; _brokerAddress = brokerAddress; _brokerPort = brokerPort; @@ -202,7 +202,8 @@ void ArduinoIoTCloudTCP::update() { // Check if a primitive property wrapper is locally changed Thing.updateTimestampOnLocallyChangedProperties(); - if(connectionCheck() != ArduinoIoTConnectionStatus::CONNECTED) return; + if(checkPhyConnection() != NetworkConnectionState::CONNECTED) return; + if(checkCloudConnection() != ArduinoIoTConnectionStatus::CONNECTED) return; if(_mqtt_data_request_retransmit && (_mqtt_data_len > 0)) { writeProperties(_mqtt_data_buf, _mqtt_data_len); @@ -346,21 +347,23 @@ void ArduinoIoTCloudTCP::requestLastValue() { writeShadowOut(CBOR_REQUEST_LAST_VALUE_MSG, sizeof(CBOR_REQUEST_LAST_VALUE_MSG)); } -ArduinoIoTConnectionStatus ArduinoIoTCloudTCP::connectionCheck() { +NetworkConnectionState ArduinoIoTCloudTCP::checkPhyConnection() +{ + NetworkConnectionState const connect_state = _connection->check(); - if (_connection != NULL) { - - _connection->check(); - - if (_connection->getStatus() != NetworkConnectionState::CONNECTED) { - if (_iotStatus == ArduinoIoTConnectionStatus::CONNECTED) { - _iotStatus = ArduinoIoTConnectionStatus::DISCONNECTED; - printConnectionStatus(_iotStatus); - } - return _iotStatus; + if (_connection->check() != NetworkConnectionState::CONNECTED) + { + if (_iotStatus == ArduinoIoTConnectionStatus::CONNECTED) + { + disconnect(); } } + return connect_state; +} + +ArduinoIoTConnectionStatus ArduinoIoTCloudTCP::checkCloudConnection() +{ switch (_iotStatus) { case ArduinoIoTConnectionStatus::IDLE: { _iotStatus = ArduinoIoTConnectionStatus::CONNECTING; diff --git a/src/ArduinoIoTCloudTCP.h b/src/ArduinoIoTCloudTCP.h index 599320e7e..579f0f98c 100644 --- a/src/ArduinoIoTCloudTCP.h +++ b/src/ArduinoIoTCloudTCP.h @@ -44,12 +44,11 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass { bool disconnect(); int connected(); void update(); - ArduinoIoTConnectionStatus connectionCheck(); void printDebugInfo(); #ifdef BOARD_HAS_ECCX08 - int begin(TcpIpConnectionHandler & connection, String brokerAddress = DEFAULT_BROKER_ADDRESS_SECURE_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_SECURE_AUTH); + int begin(ConnectionHandler & connection, String brokerAddress = DEFAULT_BROKER_ADDRESS_SECURE_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_SECURE_AUTH); #else - int begin(TcpIpConnectionHandler & connection, String brokerAddress = DEFAULT_BROKER_ADDRESS_USER_PASS_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_USER_PASS_AUTH); + int begin(ConnectionHandler & connection, String brokerAddress = DEFAULT_BROKER_ADDRESS_USER_PASS_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_USER_PASS_AUTH); #endif int begin(String brokerAddress = DEFAULT_BROKER_ADDRESS_SECURE_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_SECURE_AUTH); // Class constant declaration @@ -64,7 +63,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass { } #endif - inline TcpIpConnectionHandler * getConnection() { + inline ConnectionHandler * getConnection() { return _connection; } @@ -92,7 +91,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass { void requestLastValue(); private: - TcpIpConnectionHandler * _connection; + ConnectionHandler * _connection; String _brokerAddress; uint16_t _brokerPort; uint8_t _mqtt_data_buf[MQTT_TRANSMIT_BUFFER_SIZE]; @@ -122,6 +121,8 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass { void handleMessage(int length); void sendPropertiesToCloud(); + NetworkConnectionState checkPhyConnection(); + ArduinoIoTConnectionStatus checkCloudConnection(); }; extern ArduinoIoTCloudTCP ArduinoCloud;