Я использую библиотеку 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 conntok, который возвращается из client.connect(), но этот объект не имеет get_client()< /strong> работает только 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();
}
std::shared_ptr
. - person πάντα ῥεῖ   schedule 06.11.2016conntok.get()->get_client();
- person mrlenbenquet   schedule 06.11.2016std::shared_ptr<mqtt::itoken>connectTo();
возвращает smart_ptr в мою основную функцию.bool disconnectFrom(std::shared_ptr<mqtt::itoken>token)
использует этот токен для отключения с помощью:token->get_client()->disconnect();
Я не получаю ошибок во время компиляции, но получаю ошибку сегментации при попытке отключения. Я предполагаю, что это потому, что этот токен больше не связан с клиентом, поэтому указатель никуда не ведет. - person mrlenbenquet   schedule 06.11.2016