gpt4 book ai didi

c++ - 在 C++ 函数中使用 MQTT 客户端指针

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:47 25 4
gpt4 key购买 nike

我正在使用 Paho C++ MQTT 库连接到我的代理。

我希望我的代码按以下方式组织:

connect();
sendMessage(data);
disconnect();

由于 MQTT 客户端的范围,我已经设法连接、发送消息和断开连接,但仅在相同的功能中:

void sendMessage(){
// Connect
mqtt::itoken_ptr conntok = client.connect();
conntok->wait_for_completion();

// Sending message
pubtok = client.publish(topic, char_json, data, qos, false);
pubtok->wait_for_completion(timeout);

// Disconnect
conntok = client.disconnect();
conntok->wait_for_completion();
}

但是我想将这些代码片段放在三个独立的函数中(以避免每次发送一些数据时都重新连接/断开连接)

我想我必须使用从 client.connect() 返回的 mqtt::itoken_ptr conntok,但是这个对象没有 get_client () 函数,只有 mqtt:token 有。

文档显示有一个指向 async_client 类 std::shared_ptr ptr_t 的指针,但我不确定如何使用它,因为我是 C++ 的新手。实际的客户端对象是私有(private)的(在 C++ 包装器下)。

我怎样才能在不同的函数中使用同一个客户端对象,这样我就可以获得以下内容?

connect(){
mqtt::itoken_ptr conntok = client.connect();
}
sendMessage(){
pubtok = client.publish(topic, char_json, data, qos, false);
pubtok->wait_for_completion(timeout);
}
disconnect(){
conntok = client.disconnect();
conntok->wait_for_completion();
}

最佳答案

还没有测试过这个,但为什么你不能用伪代码:

void disconnect(mqtt::iasync_client &client);
void connect(mqtt::iasync_client &client);
void sendMessage(mqtt::iasync_client &client);

controller()
{
mqtt::async_client client(ADDRESS, CLIENTID);
connect(client);
sendMessage(client);
disconnect(client);
}

connect(&client){
callback cb;
client.set_callback(cb); // necessary to avoid segmentation fault
token = client.connect();
token->wait_for_completion(timeout);
}

sendMessage(&client){
callback cb;
client.set_callback(cb); // necessary to avoid segmentation fault
pubtok = client.publish(topic, char_json, data, qos, false);
pubtok->wait_for_completion(timeout);
}

disconnect(&client){
callback cb;
client.set_callback(cb);
conntok = client.disconnect();
conntok->wait_for_completion();
}

关于c++ - 在 C++ 函数中使用 MQTT 客户端指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40448694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com