An API for using MQTT over multiple transports

Dependencies:   FP MQTTPacket

Dependents:   Cellular_HelloMQTT IoTStarterKit GSwifiInterface_HelloMQTT IBMIoTClientEthernetExample ... more

This library is part of the EclipseTM Paho project; specifically the embedded client.

The goals of this API are:

  1. to be independent of any system library: hence templates parameters for networking, timer and threading classes
  2. not to rely on heap storage, only automatic (I think this is a good thing)
  3. to limit memory use, for instance by defining the size of the buffers and arrays used at object creation time

Files at this revision

API Documentation at this revision

Comitter:
icraggs
Date:
Thu Apr 10 22:47:17 2014 +0000
Parent:
10:68a4ada53367
Child:
13:fd82db992024
Child:
14:079ddee80e3d
Commit message:
Change thread function definitions to allow it to work

Changed in this revision

MQTTClient.cpp Show annotated file Show diff for this revision Revisions of this file
MQTTClient.h Show annotated file Show diff for this revision Revisions of this file
--- a/MQTTClient.cpp	Thu Apr 10 15:19:08 2014 +0000
+++ b/MQTTClient.cpp	Thu Apr 10 22:47:17 2014 +0000
@@ -17,13 +17,6 @@
 #include "MQTTClient.h"
 #include "MQTTPacket.h"
 
-
-void MQTT::threadfn(void* arg)
-{
-   ((Client<Network, Timer, Thread>*) arg)->run(NULL);
-}
-
-
 MQTT::PacketId::PacketId()
 {
 	next = 0;
--- a/MQTTClient.h	Thu Apr 10 15:19:08 2014 +0000
+++ b/MQTTClient.h	Thu Apr 10 22:47:17 2014 +0000
@@ -114,12 +114,19 @@
     typedef FP<void, Message*> messageHandlerFP;
     messageHandlerFP messageHandlers[MAX_MESSAGE_HANDLERS];  // Linked list, or constructor parameter to limit array size?
     
+    static void threadfn(void* arg);
+    
 };
 
-void threadfn(void* arg);
 
 }
 
+template<class Network, class Timer, class Thread> void MQTT::Client<Network, Timer, Thread>::threadfn(void* arg)
+{
+    ((Client<Network, Timer, Thread>*) arg)->run(NULL);
+}
+
+
 template<class Network, class Timer, class Thread> MQTT::Client<Network, Timer, Thread>::Client(Network* network, Timer* timer, const int buffer_size, const int command_timeout)  : packetid()
 {
     
@@ -241,6 +248,10 @@
 
 template<class Network, class Timer, class Thread> void MQTT::Client<Network, Timer, Thread>::run(void const *argument)
 {
+    while (true)
+    {
+       cycle();
+    }
 }
 
 
@@ -280,8 +291,7 @@
         connectHandler.attach(resultHandler);
         
         // start background thread
-            
-        this->thread = new Thread((void (*)(void const *argument))&MQTT::threadfn, (void*)this);
+        this->thread = new Thread((void (*)(void const *argument))&MQTT::Client<Network, Timer, Thread>::threadfn, (void*)this);
     }
     
     return rc;