16
16
17
17
#include < Arduino.h>
18
18
#include < vector>
19
+ #include < memory>
19
20
20
21
#if defined __has_include
21
22
#if !__has_include (<ArduinoIoTCloud.h>)
30
31
31
32
#include < ModemInterface.h>
32
33
#include < TimeUtils.h>
34
+ #include " ManagedTinyGsmClient.h"
33
35
34
36
/* *
35
37
* @enum ModemModel
@@ -100,6 +102,37 @@ class ArduinoCellular {
100
102
*/
101
103
ArduinoCellular ();
102
104
105
+ /* *
106
+ * @brief Destructor for the ArduinoCellular class.
107
+ * Cleans up any resources used by the class.
108
+ */
109
+ ~ArduinoCellular ();
110
+
111
+ /* *
112
+ * @brief Deleted copy constructor and assignment operator to prevent copying.
113
+ * unique_ptr is used to manage the lifetime of the clients but they cannot be copied.
114
+ */
115
+ ArduinoCellular (const ArduinoCellular&) = delete ;
116
+
117
+ /* *
118
+ * @brief Deleted assignment operator to prevent copying.
119
+ * unique_ptr is used to manage the lifetime of the clients but they cannot be copied.
120
+ */
121
+ ArduinoCellular& operator =(const ArduinoCellular&) = delete ;
122
+
123
+ /* *
124
+ * @brief Move constructor for the ArduinoCellular class.
125
+ * Allows moving the instance to another instance.
126
+ */
127
+ ArduinoCellular (ArduinoCellular&&) = default ;
128
+
129
+ /* *
130
+ * @brief Move assignment operator for the ArduinoCellular class.
131
+ * Allows moving the instance to another instance.
132
+ * @return A reference to the moved instance.
133
+ */
134
+ ArduinoCellular& operator =(ArduinoCellular&&) = default ;
135
+
103
136
/* *
104
137
* @brief Initializes the modem.
105
138
* This function must be called before using any other functions in the library.
@@ -238,6 +271,7 @@ class ArduinoCellular {
238
271
/* *
239
272
* @brief Gets a HTTP client for the specified server and port.
240
273
* The maximum number of HTTP clients is limited by the number of sockets available.
274
+ * Call `cleanup()` to release the resources used by the clients once you are done with them.
241
275
* @param server The server address.
242
276
* @param port The server port.
243
277
* @return The HTTP client.
@@ -247,12 +281,27 @@ class ArduinoCellular {
247
281
/* *
248
282
* @brief Gets a HTTPS client for the specified server and port.
249
283
* The maximum number of HTTP clients is limited by the number of sockets available.
284
+ * Call `cleanup()` to release the resources used by the clients once you are done with them.
250
285
* @param server The server address.
251
286
* @param port The server port.
252
287
* @return The HTTPS client.
253
288
*/
254
289
HttpClient getHTTPSClient (const char * server, const int port);
255
290
291
+ /* *
292
+ * @brief Cleans up the clients and releases the resources used by them.
293
+ * It's necessary to call this function to free up the memory used by the client
294
+ * objects that are created by the library internally.
295
+ */
296
+ void cleanup ();
297
+
298
+ /* *
299
+ * @brief Gets the number of managed clients.
300
+ * The clients are managed in the sense of memory management.
301
+ * @return The number of managed clients.
302
+ */
303
+ size_t getManagedClientCount () const ;
304
+
256
305
/* *
257
306
* @brief Gets the local IP address.
258
307
* @return The local IP address.
@@ -282,6 +331,10 @@ class ArduinoCellular {
282
331
SimStatus getSimStatus ();
283
332
284
333
private:
334
+ // Each instance manages its own connections
335
+ std::vector<std::unique_ptr<ManagedTinyGsmClient>> managedGsmClients;
336
+ std::vector<std::unique_ptr<BearSSLClient>> managedSslClients;
337
+
285
338
bool connectToGPRS (const char * apn, const char * gprsUser, const char * gprsPass);
286
339
287
340
0 commit comments