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