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; }
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; }