跳转至

MqttClient接口说明

一、使用示例

连接MQTT服务器,订阅消息,推送消息

#include <iostream>
#include <unistd.h>
#include <string.h>
#include "mqtt_client/mqtt_client.h"

#define MQTT_URL        "tcp://mqtt.eclipse.org:1883"
#define CLIENT_ID       "ExampleClientHost"
#define USER_NAME       "user"
#define PASSWORD        "password"
#define TOPIC_PUSH_INFO "topic_push_info"
#define TOPIC_SUB_INFO  "topic_sub_info"

// 收到消息回调函数(参数,主题,数据段,长度)
void CallbackRecvPdData(void *arg, const char* topic, const void* data, const int len)
{
    printf("[%s] [%d] [%s] Receive PD message, topic:%s\n",
        __FILE__, __LINE__, __FUNCTION__, topic);

    // 判定主题是否为PD消息
    if(strcmp(topic, TOPIC_SUB_INFO) != 0) {
        return;
    }

    for(int i = 0; i < len; i++) {
        printf("%02x ", ((uint8_t*)data)[i]);
    }
    printf("\r\n");
}

void MqttClientTest()
{
    // 创建MQTT客户端
    MqttClient *pmqtt =
        new MqttClient(MQTT_URL, CLIENT_ID, USER_NAME, PASSWORD);
    // 设置接收PD消息回调函数
    pmqtt->SetCallbackRecvMsgarrvd(CallbackRecvPdData, NULL);
    pmqtt->Subscribe(TOPIC_SUB_INFO, 0);

    // 循环推送消息
    while(1) {
        // 推送消息
        uint8_t buff[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
        pmqtt->Publish(TOPIC_PUSH_INFO, buff, sizeof(buff), 0);
        sleep(10);
    }
    delete pmqtt;
}

int main()
{
    MqttClientTest();

    return 0;
}

二、MqttClient类

1. 构造函数

/**
 * @brief 构造函数
 *
 * @param server_url             MQTT服务器URL,例"tcp://123.456.789.123:1883";
 * @param client_id              客户端ID;
 * @param user_name              用户名;
 * @param password               密码;
 */
MqttClient(const char* server_url, const char* client_id,
    const char* user_name, const char* password);
  • 参数
  • server_url MQTT服务器URL,例"tcp://123.456.789.123:1883";
  • client_id 客户端ID;
  • user_name 用户名;
  • password 密码;
  • 返回值

2. 析构函数

/**
 * @brief 析构函数
 */
~MqttClient();

3. 自动重连时间间隔设置

/**
 * @brief 自动重连时间间隔设置
 *
 * @param ms 重连时间间隔(ms)
 *
 * @return 无
 */
void AutoConnectInterval(int ms);
  • 参数
  • ms 重连时间间隔(ms)
  • 返回值

4. 推送函数

/**
 * @brief 推送函数
 *
 * @param topic 推送的主题
 * @param buf   数据buf
 * @param len   数据长度
 * @param qos   推送消息的服务质量
 *
 * @return 成功返回MQTTCLIENT_SUCCESS;异常则返回错误代码。
 */
int Publish(const char* topic, const void* buf, int len, int qos = 0);
  • 参数
  • topic 推送的主题
  • buf 数据buf
  • len 数据长度
  • qos 推送消息的服务质量
  • 返回值
  • 成功返回MQTTCLIENT_SUCCESS;异常则返回错误代码。

5. 订阅函数

/**
 * @brief 订阅函数
 *
 * @param topic 订阅主题,可能包含通配符
 * @param qos   订阅所请求的服务质量
 *
 * @return 添加订阅成功返回1;失败返回-1
 */
int Subscribe(const char* topic, int qos = 0);
  • 参数
  • topic 订阅主题,可能包含通配符
  • qos 订阅所请求的服务质量
  • 返回值

6. 取消订阅函数

/**
 * @brief 取消订阅函数
 *
 * @param topic 取消订阅的主题
 *
 * @return 取消订阅成功返回1;失败返回-1
 */
int Unsubscribe(const char* topic);
  • 参数
  • topic 取消订阅的主题
  • 返回值
  • 取消订阅成功返回1;失败返回-1

7. 设置订阅接收数据回调函数

/**
 * @brief 设置收到消息的回调函数
 *
 * @param fp_callback 回调函数
 * @param arg 回调函数的参数
 *
 * @return 无
 */
void SetCallbackRecvMsgarrvd(fpCallbackRecvMsgarrvd fp_callback, void* arg = nullptr);

// 收到消息的回调
typedef void (*fpCallbackRecvMsgarrvd)(void *arg,
    const char* topic, const void* msg, int msglen);
  • 参数
  • callback 回调函数指针
  • arg 回调函数参数
  • 返回值

8. 获取当前MQTT连接状态

/**
 * @brief 获取当前MQTT连接状态
 *
 * @return 1已连接;0未连接
 */
int GetConnectStatus();
  • 参数
  • 返回值
  • 1已连接;0未连接