您的位置:首页 > 大数据 > 物联网

百度IOT Hub (11) Paho C Client Async Publish Operation without SSL

2020-02-06 08:08 609 查看

1. 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MQTTAsync.h"

#if !defined(WIN32)
#include <unistd.h>
#else
#include <windows.h>
#endif

#if defined(_WRS_KERNEL)
#include <OsWrapper.h>
#endif

#define ADDRESS     "tcp://sdmn79a.mqtt.iot.gz.baidubce.com:1883"
#define CLIENTID    "MyMonitor_Pub"
#define TOPIC       "$baidu/iot/general/abc"
#define PAYLOAD     "Hello World!"
#define QOS         1
#define TIMEOUT     10000L

volatile MQTTAsync_token deliveredtoken;

int finished = 0;

void connlost(void *context, char *cause)
{
    MQTTAsync client = (MQTTAsync)context;
    MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
    int rc;

    printf("\n[connlost] : Connection lost\n");
    printf("     cause: %s\n", cause);

    printf("[connlost] : Reconnecting\n");
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;
    if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
    {
        printf("[connlost] : Failed to start connect, return code %d\n", rc);
         finished = 1;
    }
}


void onDisconnect(void* context, MQTTAsync_successData* response)
{
    printf("[onDisconnect] : Successful disconnection\n");
    finished = 1;
}


void onSend(void* context, MQTTAsync_successData* response)
{
    MQTTAsync client = (MQTTAsync)context;
    MQTTAsync_disconnectOptions opts = MQTTAsync_disconnectOptions_initializer;
    int rc;

    printf("[onSend] : Message with token value %d delivery confirmed\n", response->token);

    opts.onSuccess = onDisconnect;
    opts.context = client;

    if ((rc = MQTTAsync_disconnect(client, &opts)) != MQTTASYNC_SUCCESS)
    {
        printf("[onSend] : Failed to start sendMessage, return code %d\n", rc);
        exit(EXIT_FAILURE);
    }
}


void onConnectFailure(void* context, MQTTAsync_failureData* response)
{
    printf("[onConnectFailure] : Connect failed, rc %d\n", response ? response->code : 0);
    finished = 1;
}


void onConnect(void* context, MQTTAsync_successData* response)
{
    MQTTAsync client = (MQTTAsync)context;
    MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
    MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
    int rc;

    printf("[onConnect] : Successful connection\n");
    
    opts.onSuccess = onSend;
    opts.context = client;

    pubmsg.payload = PAYLOAD;
    pubmsg.payloadlen = (int)strlen(PAYLOAD);
    pubmsg.qos = QOS;
    pubmsg.retained = 0;
    deliveredtoken = 0;

    if ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &opts)) != MQTTASYNC_SUCCESS)
    {
        printf("[onConnect] : Failed to start sendMessage, return code %d\n", rc);
        exit(EXIT_FAILURE);
    }
}


int main(int argc, char* argv[])
{
    MQTTAsync client;
    MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
    int rc;

    MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);

    MQTTAsync_setCallbacks(client, NULL, connlost, NULL, NULL);

    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;
    conn_opts.onSuccess = onConnect;
    conn_opts.onFailure = onConnectFailure;
    conn_opts.context = client;
    conn_opts.username = "sdmn79a/MyMonitor_Pub";
    conn_opts.password = "xxxxxxxxxxxxxx";
    conn_opts.MQTTVersion = MQTTVERSION_3_1_1;

    if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
    {
        printf("[main] : Failed to start connect, return code %d\n", rc);
        exit(EXIT_FAILURE);
    }

    printf("[main] : Waiting for publication of %s\n"
         "on topic %s for client with ClientID: %s\n",
         PAYLOAD, TOPIC, CLIENTID);
    while (!finished)
        #if defined(WIN32)
            Sleep(100);
        #else
            usleep(10000L);
        #endif

    MQTTAsync_destroy(&client);
     return rc;
}

2. 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
umltec 发布了12 篇原创文章 · 获赞 0 · 访问量 574 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐