我正在使用Paho C++ MQTT库连接到我的代理。在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();
}
但是我想有这些的代码片段在三个不同的功能(以避免重新连接/断开每次我发送一些数据时)
我想,我必须使用MQTT :: itoken_ptr conntok是从client.connect()返回,但这个对象没有get_client()功能,只有MQTT:令牌一样。
的文档表明,对于async_client类的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();
}
这里有一个更深入的文档['标准:: shared_ptr'(HTTP:// EN .cppreference.com /瓦特/ CPP /存储器/ shared_ptr的)。 –
谢谢。我阅读这些文档,但无法弄清楚如何检索客户端。 我不能返回itoken_ptr(因为它是抽象的),并且不能返回MQTT:iasync_client要么由 'conntok.get()返回 - > get_client();' – mrlenbenquet
这里是我的尝试: 'STD :: shared_ptr的 connectTo(); '将smart_ptr返回给我的主函数。 '布尔disconnectFrom(STD :: shared_ptr的令牌)'使用此标记通过使用断开: '令牌的> get_client() - >断开();' 我期间没有错误编译,但在尝试断开连接时出现分段错误。我认为这是因为这个令牌不再与客户端关联,因此指针无处可去。 –
mrlenbenquet