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:
6:34c07e145caa
Parent:
5:4ad5ec5802a2
Child:
7:f570eb3f38cd
--- a/MQTTTransport.cpp	Wed Feb 26 05:45:49 2014 +0000
+++ b/MQTTTransport.cpp	Wed Feb 26 07:22:34 2014 +0000
@@ -29,7 +29,7 @@
 
  // MQTT callback to handle received messages
  void _mqtt_message_handler(char *topic,char *payload,unsigned int length) {
-    if (instance != NULL) instance->processMessage((char *)payload,length);
+    if (instance != NULL) instance->processMessage(instance->getEndpointNameFromTopic(topic),payload,length);
  }
  
  // our MQTT client endpoint
@@ -48,44 +48,54 @@
      if (this->m_mqtt != NULL) delete this->m_mqtt;
  }
  
+ // pull the endpoint name from the MQTT topic
+ char *MQTTTransport::getEndpointNameFromTopic(char *topic) {
+     memset(this->m_endpoint_name,0,LIGHT_NAME_LEN+1);
+     
+     // XXX until we get the splitter working, lets just default this name
+     char *tmp = ((MBEDEndpoint *)this->getEndpoint())->getEndpointName();
+     strncpy(this->m_endpoint_name,tmp,strlen(tmp));
+     
+     // DEBUG
+     if (tmp == NULL) this->logger()->log("ERROR!  endpointName is NULL");
+     else this->logger()->log("TMP: %s length=%d",tmp,strlen(tmp));
+     
+     return this->m_endpoint_name;
+ }
+ 
  // process a MQTT Message
- void MQTTTransport::processMessage(char *payload, unsigned int len) {
+ void MQTTTransport::processMessage(char *message_name,char *payload, unsigned int len) {
      char *message_type = NULL;
-     char *message_name = NULL;
      char *message_verb = NULL;
      char *message_value = NULL;
      char *message_opt = NULL;
      char *endpoint_name = NULL;
+     
+     // get our endpoint
      MBEDEndpoint *endpoint = (MBEDEndpoint *)this->getEndpoint();
 
+     char buffer[129];
+     memset(buffer,0,129);
+     memcpy(buffer,payload,len);
+     
      // DEBUG
-     this->logger()->pause("MQTT Message: %s length=%d",payload,len);
+     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(payload,':',this->logger());
+     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");
-     
-     // format of the MQTT message:   message_type:name:verb|Parameter_X:value|keyword:optional_data
-     /*
-     if (count > 0) message_type = data[0];
-     if (count > 1) message_name = data[1];
-     if (count > 2) message_verb = data[2];
-     if (count > 3) message_value = data[3];
-     if (count > 4) message_opt = data[4];
-     */
-     
+               
      // get our endpoint name
      this->logger()->pause("DOUG5");
      endpoint_name = endpoint->getEndpointName();
      
-     // XXX FIXUP until MQTT messages have endpoint_names in them
+     // format of the MQTT message:   message_type:verb|Parameter_X:value|keyword:optional_data
      if (count > 0) message_type  = data[0];
-     message_name = endpoint->getEndpointName();               // if (count > 1) message_name = (char *)data[1].c_str();
      if (count > 1) message_verb  = data[1];
      if (count > 2) message_value = data[2];
      if (count > 3) message_opt   = data[3];