示例#1
0
static int mqttClient_processConnAck(mqttClient_t* clientData)
{
  int32_t rc = LE_OK;
  uint8_t sessionPresent = 0;
  uint8_t connack_rc = 0;

  LE_DEBUG("---> CONNACK");
  LE_ASSERT(clientData);

  rc = le_timer_Stop(clientData->session.cmdTimer);
  if (rc)
  {
    LE_ERROR("le_timer_Stop() failed(%d)", rc);
    goto cleanup;
  }


  rc = MQTTDeserialize_connack((unsigned char*)&sessionPresent, &connack_rc, clientData->session.rx.buf, sizeof(clientData->session.rx.buf));
  if (rc != 1)
  {
    LE_ERROR("MQTTDeserialize_connack() failed(%d)", rc);
    rc = LE_BAD_PARAMETER;
    goto cleanup;
  }

  LE_DEBUG("session present(%u) connection ACK(%u)", sessionPresent, connack_rc);
  clientData->session.isConnected = (connack_rc == MQTT_CLIENT_CONNECT_SUCCESS);

  if (clientData->session.isConnected)
  {
    mqttClient_SendConnStateEvent(true, 0, rc);

    LE_INFO("subscribe('%s')", clientData->subscribeTopic);
    rc = mqttClient_subscribe(clientData, clientData->subscribeTopic, 0, mqttClient_onIncomingMessage);
    if (rc)
    {
      LE_ERROR("mqttClient_subscribe() failed(%d)", rc);
      goto cleanup;
    }
  }
  else
  {
    LE_ERROR("response('%s')", mqttClient_connectionRsp(connack_rc));
    rc = LE_BAD_PARAMETER;
    goto cleanup;
  }

cleanup:
  return rc;
}
示例#2
0
MqttReturnCode  mqttClient_start2(AJBMqttClient *client,MqttConfigure config,MqttDispatcher dispatcher){
    newAJBMqttClient(client,config.username, config.password, config.clientid,config.cleansession);
    
    client->keepAlive = config.keepAlive;    //default is 20s
    client->qos = 2;                      //default is QOS2
    client->timout_ms = config.timeout_ms;   //default is 2000ms
    client->aliveAttr = config.aliveAttr;
    //    MqttLog("%d-%d-%d-%d",client->aliveAttr.auto_con,client->aliveAttr.recon_int,client->aliveAttr.recon_max,client->aliveAttr.reconnecting);
    
    //    setWill(&client, "c/test1234567890/info", "this is a will");
    client->dispatcher = dispatcher;
    client->dispatcher.shouldReSubscribe = NULL;
    
    
    mqttClient_setDispatcher(client,dispatcher);
    
    int raw = client->keepworking;
    client->keepworking = 1;
    mqttClient_connect(client,config.host,config.port);
    client->keepworking = raw;
    
    char topic[MAX_TOPIC_LEN]={};
    getSuggestTopic(topic, client->clientId);
    if ((!config.disable_subscribe) || (client->cleanSession!=0)) {
        mqttClient_subscribe(client, topic, 2);
    }
    else{
        MqttLog("[SUB %s] skip subscribe",client->clientId);
    }
    
    //    mqttClient_subscribe(client, "c/lixiao-0612/info", 2);
    dispatcher.shouldReSubscribe = dispatcher.shouldReSubscribe;
    //    client->keepRunning(client);
    
    return 0;
}