Exemplo n.º 1
0
void testPublish (AJBMqttClient *client){
    MqttClientPublishInfo info = MqttPublishInfoIniter;
    
    struct timeval now;
    gettimeofday(&now, NULL);
    
    char state[MAX_CONTENT_LEN]={};
    sprintf(state,"{time:%ld.%d,clientid:%s}",now.tv_sec,now.tv_usec,client->clientId);
    char topic[MAX_TOPIC_LEN]={};
    sprintf(topic, "c/%s/status",client->clientId);
    info.publishTopic = client->topic;
    info.publishContent = state;
    mqttClient_publish(client, &info);
}
Exemplo n.º 2
0
static int mqttClient_sendPublishAck(const char* uid, int nAck, const char* message)
{
  mqttClient_t* clientData = mqttMain_getClient();
  char* payload = (char*) malloc(strlen(uid) + strlen(message)+48);

  if (nAck == 0)
  {
    sprintf(payload, "[{\"uid\": \"%s\", \"status\" : \"OK\"", uid);
  }
  else
  {
    sprintf(payload, "[{\"uid\": \"%s\", \"status\" : \"ERROR\"", uid);
  }

  if (strlen(message) > 0)
  {
    sprintf(payload, "%s, \"message\" : \"%s\"}]", payload, message);
  }
  else
  {     
    sprintf(payload, "%s}]", payload);
  }

  LE_DEBUG("ACK Message('%s')", payload);

  mqttClient_msg_t msg;
  msg.qos = clientData->session.config.QoS;
  msg.retained = 0;
  msg.dup = 0;
  msg.id = 0;
  msg.payload = payload;
  msg.payloadLen = strlen(payload);

  char* topic = malloc(strlen(MQTT_CLIENT_TOPIC_NAME_ACK) + strlen(clientData->deviceId) + 1);
  sprintf(topic, "%s%s", clientData->deviceId, MQTT_CLIENT_TOPIC_NAME_ACK);

  LE_INFO("<--- PUBLISH('%s')", topic);
  int rc = mqttClient_publish(clientData, topic, &msg);
  if (rc)
  {
    LE_ERROR("mqttClient_publish() failed(%d)", rc);
    goto cleanup;
  }

cleanup:
  if (topic) free(topic);
  if (payload) free(payload);
  return rc;
}