在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();
}
然而,我想有那些代码片段在三个独立的函数(以避免每次我发送一些数据时重新连接/断开)
我想我必须使用mqtt::itoken_ptr连接从client.connect()返回的,但是这个对象没有get_client()函数,只有mqtt:token。
文档显示,有一个指针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();
}
还没有测试过,但为什么不能在伪代码中:
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();
}
相关文章:
- 为 Windows 8.1 安装 MQTT 客户端
- 如何将数据从 Java 客户机发送到C++服务器
- omniORB C++服务器,Java 客户机在运行应用程序时出现问题
- 将 Arduino MQTT 客户端与 Node JS MQTT 服务器连接
- 在c++函数中使用MQTT客户机指针
- 如果我用较新版本的gcc编译二进制文件,我如何找到需要在客户机linux机器上安装的库?
- 简单的客户机/服务器TCP c++
- 具有单消息和广播的c++客户机/服务器应用程序
- Windows上的TLS客户机和服务器[openssl vs. sspi vs. cryptlib]
- 于服务器-客户机通知
- 异步服务器在没有明显原因的情况下停止从客户机获取数据
- 使用Swift和c++的客户机-服务器应用程序
- 通过套接字将对象(XML输出或任何c++对象类型)从服务器传递到客户机,反之亦然
- 使用序列化将类的对象从客户机发送到服务器
- Boost库客户机-服务器应用程序
- 用AJAX请求从客户机终止用c++编写的长时间运行的CGI脚本
- 如何在多线程客户机的多个线程上访问同一个套接字
- 客户机和服务器之间的通信不稳定
- 如何从服务器中的客户机池中识别客户机-设计
- 关于多线程客户机的BOOST教程