至于怎麼連接配接,訂閱,釋出的,這裡就不重複說了,網上很多,詳細看官方文檔,
https://www.eclipse.org/paho/files/mqttdoc/MQTTAsync/html/struct_m_q_t_t_async__connect_options.html#a7902ce4d11b96d8b19582bdd1f82b630
1,特别說明,重連這個是異步特有的,不是同步的,同步的是沒有的;
2,詳細的,代碼我這裡也不全部粘貼了,畢竟是公司的;
3,其實就是連接配接的3個參數和一個MQTTAsync_setConnected()函數。
conn_opts.automaticReconnect = 1;
conn_opts.minRetryInterval = 2; //seconds
conn_opts.maxRetryInterval = 365*24*60*60;
第一個參數,使能自動重連;
第二個參數,是每次重連的時間間隔;
conn_opts.automaticReconnect = 1;
conn_opts.minRetryInterval = 2; //seconds
conn_opts.maxRetryInterval = 365*24*60*60;
conn_opts.context = GlobalClient;
//注意,異步連接配接函數的傳回值為0,表示的是請求連接配接被接收了,onConnect被調用才是真正地連接配接成功
while(1)
{
rc = MQTTAsync_connect(GlobalClient, &conn_opts);
if (rc == MQTTASYNC_SUCCESS)
{
printf("Successfully start the request of connect.\n");
break;
}
sleep(1);
printf("Failed to start the request of connect, return error code.\n", rc);
}
//這個函數是隻有automaticReconnect被置為真時,才用的,也就是說自動重連的時候,會用這個函數
while(1)
{
rc = MQTTAsync_setConnected(GlobalClient, (VOID *)GlobalClient, onConnected);
if (rc == MQTTASYNC_SUCCESS)
{
printf("Successfully setConnected.\n");
break;
}
sleep(1);
printf("Failed to setConnected, return error code %d.\n", rc);
}
}
/*******************************************************************************
函 數 名 : onConnected
功能描述 : MQTTAsync_setConnected()函數重連成功調用的函數,在這裡做重連之後的訂閱操作
輸入參數 : VOID *context, CHAR *cause,參數是固定的
輸出參數 : None
返 回 值 : None
*******************************************************************************/
VOID onConnected(VOID* context, CHAR* cause)
{
printf("set on connected\n");
MQTTAsync_responseOptions sub_opts = MQTTAsync_responseOptions_initializer;
sub_opts.onSuccess = onSubscribe;
sub_opts.onFailure = onSubscribeFailure;
sub_opts.context = GlobalClient;
INT32 rc;
printf("Successful connection, then ");
INT32 qoss[SUB_TOPIC_COUNT] = {SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, \
SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, \
SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, \
SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, \
SUB_TOPIC_QOS2, SUB_TOPIC_QOS2};
CHAR *topics[SUB_TOPIC_COUNT] = {