From f675a81367efd6619562a5fcee7923f8f5f761a3 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 8 Apr 2020 08:35:40 +0200 Subject: [PATCH 1/3] Turning connect/disconnect into protected functions because there is no need to access those functions from the outside. It might be relevant to add a 'end' function which does the opposite of the 'begin' function, that is ramping everything down in an orderly fashion --- src/ArduinoIoTCloud.h | 5 +-- src/ArduinoIoTCloudLPWAN.cpp | 28 +++++++++------- src/ArduinoIoTCloudLPWAN.h | 8 +++-- src/ArduinoIoTCloudTCP.cpp | 64 +++++++++++++++++++----------------- src/ArduinoIoTCloudTCP.h | 10 ++++-- 5 files changed, 66 insertions(+), 49 deletions(-) diff --git a/src/ArduinoIoTCloud.h b/src/ArduinoIoTCloud.h index 9bd8f60aa..969a147ae 100644 --- a/src/ArduinoIoTCloud.h +++ b/src/ArduinoIoTCloud.h @@ -81,8 +81,6 @@ class ArduinoIoTCloudClass virtual ~ArduinoIoTCloudClass() { } - virtual int connect () = 0; - virtual bool disconnect () = 0; virtual void update () = 0; virtual int connected () = 0; virtual void printDebugInfo() = 0; @@ -134,6 +132,9 @@ class ArduinoIoTCloudClass protected: + virtual int connect () = 0; + virtual bool disconnect() = 0; + inline ArduinoIoTConnectionStatus getIoTStatus() { return _iot_status; } ConnectionHandler * _connection = nullptr; diff --git a/src/ArduinoIoTCloudLPWAN.cpp b/src/ArduinoIoTCloudLPWAN.cpp index f05070049..db3872b5c 100644 --- a/src/ArduinoIoTCloudLPWAN.cpp +++ b/src/ArduinoIoTCloudLPWAN.cpp @@ -47,18 +47,6 @@ ArduinoIoTCloudLPWAN::ArduinoIoTCloudLPWAN() * PUBLIC MEMBER FUNCTIONS ******************************************************************************/ -int ArduinoIoTCloudLPWAN::connect() -{ - _connection->connect(); - return 1; -} - -bool ArduinoIoTCloudLPWAN::disconnect() -{ - _connection->disconnect(); - return true; -} - int ArduinoIoTCloudLPWAN::connected() { return (_connection->getStatus() == NetworkConnectionState::CONNECTED) ? 1 : 0; @@ -116,6 +104,22 @@ void ArduinoIoTCloudLPWAN::printDebugInfo() Debug.print(DBG_INFO, "Thing ID: %s", getThingId().c_str()); } +/****************************************************************************** + * PROTECTED MEMBER FUNCTIONS + ******************************************************************************/ + +int ArduinoIoTCloudLPWAN::connect() +{ + _connection->connect(); + return 1; +} + +bool ArduinoIoTCloudLPWAN::disconnect() +{ + _connection->disconnect(); + return true; +} + /****************************************************************************** * PRIVATE MEMBER FUNCTIONS ******************************************************************************/ diff --git a/src/ArduinoIoTCloudLPWAN.h b/src/ArduinoIoTCloudLPWAN.h index 49dcdf8b7..9f301a107 100644 --- a/src/ArduinoIoTCloudLPWAN.h +++ b/src/ArduinoIoTCloudLPWAN.h @@ -35,8 +35,6 @@ class ArduinoIoTCloudLPWAN : public ArduinoIoTCloudClass ArduinoIoTCloudLPWAN(); virtual ~ArduinoIoTCloudLPWAN() { } - virtual int connect () override; - virtual bool disconnect () override; virtual void update () override; virtual int connected () override; virtual void printDebugInfo() override; @@ -52,6 +50,12 @@ class ArduinoIoTCloudLPWAN : public ArduinoIoTCloudClass inline void setIntervalRetry(long val) { _intervalRetry = val; } + protected: + + virtual int connect () override; + virtual bool disconnect () override; + + private: bool _retryEnable; diff --git a/src/ArduinoIoTCloudTCP.cpp b/src/ArduinoIoTCloudTCP.cpp index 98bbfca5c..fe008e366 100644 --- a/src/ArduinoIoTCloudTCP.cpp +++ b/src/ArduinoIoTCloudTCP.cpp @@ -141,35 +141,6 @@ int ArduinoIoTCloudTCP::begin(String brokerAddress, uint16_t brokerPort) return 1; } -int ArduinoIoTCloudTCP::connect() -{ - if (!_mqttClient->connect(_brokerAddress.c_str(), _brokerPort)) { - return CONNECT_FAILURE; - } - if (_mqttClient->subscribe(_stdinTopic) == 0) { - return CONNECT_FAILURE_SUBSCRIBE; - } - if (_mqttClient->subscribe(_dataTopicIn) == 0) { - return CONNECT_FAILURE_SUBSCRIBE; - } - if (_shadowTopicIn != "") { - if (_mqttClient->subscribe(_shadowTopicIn) == 0) { - return CONNECT_FAILURE_SUBSCRIBE; - } - _syncStatus = ArduinoIoTSynchronizationStatus::SYNC_STATUS_WAIT_FOR_CLOUD_VALUES; - _lastSyncRequestTickTime = 0; - } - - return CONNECT_SUCCESS; -} - - -bool ArduinoIoTCloudTCP::disconnect() -{ - _mqttClient->stop(); - return true; -} - void ArduinoIoTCloudTCP::update() { // Check if a primitive property wrapper is locally changed @@ -209,6 +180,11 @@ void ArduinoIoTCloudTCP::update() } } +int ArduinoIoTCloudTCP::connected() +{ + return _mqttClient->connected(); +} + void ArduinoIoTCloudTCP::printDebugInfo() { Debug.print(DBG_INFO, "***** Arduino IoT Cloud - configuration info *****"); @@ -225,10 +201,36 @@ int ArduinoIoTCloudTCP::reconnect() return connect(); } +/****************************************************************************** + * PROTECTED MEMBER FUNCTIONS + ******************************************************************************/ -int ArduinoIoTCloudTCP::connected() +int ArduinoIoTCloudTCP::connect() { - return _mqttClient->connected(); + if (!_mqttClient->connect(_brokerAddress.c_str(), _brokerPort)) { + return CONNECT_FAILURE; + } + if (_mqttClient->subscribe(_stdinTopic) == 0) { + return CONNECT_FAILURE_SUBSCRIBE; + } + if (_mqttClient->subscribe(_dataTopicIn) == 0) { + return CONNECT_FAILURE_SUBSCRIBE; + } + if (_shadowTopicIn != "") { + if (_mqttClient->subscribe(_shadowTopicIn) == 0) { + return CONNECT_FAILURE_SUBSCRIBE; + } + _syncStatus = ArduinoIoTSynchronizationStatus::SYNC_STATUS_WAIT_FOR_CLOUD_VALUES; + _lastSyncRequestTickTime = 0; + } + + return CONNECT_SUCCESS; +} + +bool ArduinoIoTCloudTCP::disconnect() +{ + _mqttClient->stop(); + return true; } /****************************************************************************** diff --git a/src/ArduinoIoTCloudTCP.h b/src/ArduinoIoTCloudTCP.h index aeae5aeba..1c7d5b39f 100644 --- a/src/ArduinoIoTCloudTCP.h +++ b/src/ArduinoIoTCloudTCP.h @@ -53,8 +53,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass ArduinoIoTCloudTCP(); virtual ~ArduinoIoTCloudTCP(); - virtual int connect () override; - virtual bool disconnect () override; + virtual void update () override; virtual int connected () override; virtual void printDebugInfo() override; @@ -79,6 +78,13 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass friend class CloudSerialClass; + + protected: + + virtual int connect () override; + virtual bool disconnect () override; + + private: static const int MQTT_TRANSMIT_BUFFER_SIZE = 256; From 7a3f27a6729e48de28b949e72d58617b04533993 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 8 Apr 2020 08:39:30 +0200 Subject: [PATCH 2/3] Changing return type of disconnect from bool to void since the operation can't fail anyway --- src/ArduinoIoTCloud.h | 2 +- src/ArduinoIoTCloudLPWAN.cpp | 3 +-- src/ArduinoIoTCloudLPWAN.h | 2 +- src/ArduinoIoTCloudTCP.cpp | 3 +-- src/ArduinoIoTCloudTCP.h | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/ArduinoIoTCloud.h b/src/ArduinoIoTCloud.h index 969a147ae..7a52f7969 100644 --- a/src/ArduinoIoTCloud.h +++ b/src/ArduinoIoTCloud.h @@ -133,7 +133,7 @@ class ArduinoIoTCloudClass protected: virtual int connect () = 0; - virtual bool disconnect() = 0; + virtual void disconnect() = 0; inline ArduinoIoTConnectionStatus getIoTStatus() { return _iot_status; } diff --git a/src/ArduinoIoTCloudLPWAN.cpp b/src/ArduinoIoTCloudLPWAN.cpp index db3872b5c..6ddd090c6 100644 --- a/src/ArduinoIoTCloudLPWAN.cpp +++ b/src/ArduinoIoTCloudLPWAN.cpp @@ -114,10 +114,9 @@ int ArduinoIoTCloudLPWAN::connect() return 1; } -bool ArduinoIoTCloudLPWAN::disconnect() +void ArduinoIoTCloudLPWAN::disconnect() { _connection->disconnect(); - return true; } /****************************************************************************** diff --git a/src/ArduinoIoTCloudLPWAN.h b/src/ArduinoIoTCloudLPWAN.h index 9f301a107..2abe4ba01 100644 --- a/src/ArduinoIoTCloudLPWAN.h +++ b/src/ArduinoIoTCloudLPWAN.h @@ -53,7 +53,7 @@ class ArduinoIoTCloudLPWAN : public ArduinoIoTCloudClass protected: virtual int connect () override; - virtual bool disconnect () override; + virtual void disconnect () override; private: diff --git a/src/ArduinoIoTCloudTCP.cpp b/src/ArduinoIoTCloudTCP.cpp index fe008e366..2581fb6ea 100644 --- a/src/ArduinoIoTCloudTCP.cpp +++ b/src/ArduinoIoTCloudTCP.cpp @@ -227,10 +227,9 @@ int ArduinoIoTCloudTCP::connect() return CONNECT_SUCCESS; } -bool ArduinoIoTCloudTCP::disconnect() +void ArduinoIoTCloudTCP::disconnect() { _mqttClient->stop(); - return true; } /****************************************************************************** diff --git a/src/ArduinoIoTCloudTCP.h b/src/ArduinoIoTCloudTCP.h index 1c7d5b39f..9a62047c7 100644 --- a/src/ArduinoIoTCloudTCP.h +++ b/src/ArduinoIoTCloudTCP.h @@ -82,7 +82,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass protected: virtual int connect () override; - virtual bool disconnect () override; + virtual void disconnect () override; private: From 3142ff5b0130ad32fc8c41fe8f39a731bd8a9919 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 8 Apr 2020 08:41:21 +0200 Subject: [PATCH 3/3] Reformatting ArduinoIoTCloudTCP::connect for better readability --- src/ArduinoIoTCloudTCP.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/ArduinoIoTCloudTCP.cpp b/src/ArduinoIoTCloudTCP.cpp index 2581fb6ea..cd5f262a8 100644 --- a/src/ArduinoIoTCloudTCP.cpp +++ b/src/ArduinoIoTCloudTCP.cpp @@ -207,19 +207,13 @@ int ArduinoIoTCloudTCP::reconnect() int ArduinoIoTCloudTCP::connect() { - if (!_mqttClient->connect(_brokerAddress.c_str(), _brokerPort)) { - return CONNECT_FAILURE; - } - if (_mqttClient->subscribe(_stdinTopic) == 0) { - return CONNECT_FAILURE_SUBSCRIBE; - } - if (_mqttClient->subscribe(_dataTopicIn) == 0) { - return CONNECT_FAILURE_SUBSCRIBE; - } - if (_shadowTopicIn != "") { - if (_mqttClient->subscribe(_shadowTopicIn) == 0) { - return CONNECT_FAILURE_SUBSCRIBE; - } + if (!_mqttClient->connect(_brokerAddress.c_str(), _brokerPort)) return CONNECT_FAILURE; + if (_mqttClient->subscribe(_stdinTopic) == 0) return CONNECT_FAILURE_SUBSCRIBE; + if (_mqttClient->subscribe(_dataTopicIn) == 0) return CONNECT_FAILURE_SUBSCRIBE; + + if (_shadowTopicIn != "") + { + if (_mqttClient->subscribe(_shadowTopicIn) == 0) return CONNECT_FAILURE_SUBSCRIBE; _syncStatus = ArduinoIoTSynchronizationStatus::SYNC_STATUS_WAIT_FOR_CLOUD_VALUES; _lastSyncRequestTickTime = 0; }