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

Use MQTT client pointer amongst C++ functions

我正在使用 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();
}

但是我想在三个单独的函数中使用那些 代码 (以避免 reconnecting/disconnecting 每次我发送一些数据时)

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

文档显示 async_client class std::shared_ptr ptr_t 有一个指针,但我我不确定如何使用它,因为我是 C++ 的新手。实际的客户端对象是私有的(在 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();
}