MBED_DEMOS / Mbed 2 deprecated mbed_mqtt_endpoint_ublox_ethernet

Dependencies:   C027 C12832 EthernetInterface StatusReporter LM75B MQTT-ansond endpoint_core endpoint_mqtt mbed-rtos mbed

Revision:
7:f570eb3f38cd
Parent:
6:34c07e145caa
Child:
8:45f9a920e82c
--- a/MQTTTransport.cpp	Wed Feb 26 07:22:34 2014 +0000
+++ b/MQTTTransport.cpp	Wed Feb 26 18:59:08 2014 +0000
@@ -21,8 +21,8 @@
  // Endpoint Support
  #include "MBEDEndpoint.h"
  
- // string splitter support
- #include "Splitter.h"
+ // splitstring support
+ #include "splitstring.h"
  
  // our transmitt instance 
  MQTTTransport *instance =  NULL;
@@ -36,10 +36,10 @@
  PubSubClient _mqtt(MQTT_HOSTNAME,MQTT_HOSTPORT,_mqtt_message_handler);
   
  // default constructor
- MQTTTransport::MQTTTransport(ErrorHandler *error_handler) : Transport(error_handler) {
+ MQTTTransport::MQTTTransport(ErrorHandler *error_handler,void *endpoint) : Transport(error_handler,endpoint) {
      this->m_mqtt = NULL;
      instance = this;
-     this->m_map = new MBEDToIOCResourceMap();
+     this->m_map = new MBEDToIOCResourceMap(error_handler);
  }
  
  // default destructor
@@ -65,49 +65,44 @@
  
  // process a MQTT Message
  void MQTTTransport::processMessage(char *message_name,char *payload, unsigned int len) {
-     char *message_type = NULL;
-     char *message_verb = NULL;
-     char *message_value = NULL;
-     char *message_opt = NULL;
-     char *endpoint_name = NULL;
+     char *message_type = "";
+     char *message_verb = "";
+     char *message_value = "";
+     char *message_opt = "";
+     
+     bool enable = true;
      
      // get our endpoint
      MBEDEndpoint *endpoint = (MBEDEndpoint *)this->getEndpoint();
-
-     char buffer[129];
-     memset(buffer,0,129);
-     memcpy(buffer,payload,len);
+     char *endpoint_name = endpoint->getEndpointName();
      
      // DEBUG
-     this->logger()->pause("MQTT Message: %s length=%d endpoint_name=%s",buffer,len,message_name);
-     
-     // split the string by the delimiter
-     this->logger()->pause("DOUG1");
-     Splitter *splitter = new Splitter(buffer,':',this->logger());
-     this->logger()->pause("DOUG2");
-     char** data = splitter->split();
-     this->logger()->pause("DOUG3");
-     int count = splitter->size(data);
-     this->logger()->pause("DOUG4");
-               
-     // get our endpoint name
-     this->logger()->pause("DOUG5");
-     endpoint_name = endpoint->getEndpointName();
-     
-     // format of the MQTT message:   message_type:verb|Parameter_X:value|keyword:optional_data
-     if (count > 0) message_type  = data[0];
-     if (count > 1) message_verb  = data[1];
-     if (count > 2) message_value = data[2];
-     if (count > 3) message_opt   = data[3];
-               
-     // DEBUG
-     this->logger()->log("Type: %s Name: %s Verb: %s Value: %s",message_type,message_name,message_verb,message_value);
-     
+     this->logger()->pause("MQTT Message: %s length=%d endpoint_name=%s",payload,len,message_name);
+
      // only respond if its for our node
-     if (false && strcmp(endpoint_name,message_name) == 0) {
+     if (enable && strcmp(endpoint_name,message_name) == 0) {
          // DEBUG
          this->logger()->log("Message: %s bound for %s... processing...",payload,endpoint_name);
-         
+                  
+         // format of the MQTT message:   message_type:verb|Parameter_X:value|keyword:optional_data        
+         splitstring *tmp = new splitstring(payload); 
+         this->logger()->pause("DOUG1");  
+         vector<string> data = tmp->split(':');    
+         this->logger()->pause("DOUG2");
+         if (data.size() > 0) message_type  = (char *)data[0].c_str();
+         this->logger()->pause("DOUG3");
+         if (data.size() > 1) message_verb  = (char *)data[1].c_str();
+         this->logger()->pause("DOUG4");
+         if (data.size() > 2) message_value = (char *)data[2].c_str();
+         this->logger()->pause("DOUG5");
+         if (data.size() > 3) message_opt   = (char *)data[3].c_str();
+         this->logger()->pause("DOUG6");
+               
+         // DEBUG
+         this->logger()->log("Type: %s Name: %s Verb: %s Value: %s",message_type,message_name,message_verb,message_value);
+               
+         return;
+            
          // load endpoints
          if (message_type != NULL && strcmp(message_type,"Endpoint") == 0) {
              if (message_name != NULL && strcmp(message_name,"all") == 0) {
@@ -175,17 +170,17 @@
                  }
              }
          }
+         
+         // clean up the array
+         //if (data != NULL) splitter->clear(data);
+     
+         // clean up
+         //if (splitter != NULL) delete splitter;
      }
      else {
          // message not bound for our node
          this->logger()->log("MQTT Message: %s not for us: %s... ignoring...",payload,endpoint_name);
-     }
-     
-     // clean up the array
-     if (data != NULL) splitter->clear(data);
-     
-     // clean up
-     if (splitter != NULL) delete splitter;
+     }     
  }
  
  void MQTTTransport::sendResourceValue(char *endpoint_name,char *parameter_name,char *value) {
@@ -221,16 +216,19 @@
                  else {
                      this->logger()->log("MQTT Subscribe: Topic: %s FAILED",MQTT_IOC_TOPIC);
                      this->logger()->turnLEDRed();
+                     this->m_connected = false;
                  }
              }
              else {
                  this->logger()->log("MQTT Connect: ID: %s FAILED",id);
                  this->logger()->turnLEDRed();
+                 this->m_connected = false;
              }
          }
          else {
              this->logger()->log("MQTT Unable to allocate new instance");
              this->logger()->turnLEDRed();
+             this->m_connected = false;
          }
      }
      else {