Я использую библиотеку Paho C++ MQTT для подключения к моему брокеру.Использовать указатель клиента MQTT среди функций C++
Я хочу, чтобы мой код, который будет организован следующим образом:
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 класса станд :: 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: // ан .cppreference.com/ж/CPP/память/shared_ptr). –
Спасибо. Я прочитал эту документацию, но не смог понять, как получить клиент. я не могу вернуть itoken_ptr (так как это абстрактное), и не может вернуть MQTT: iasync_client что либо возвращается 'conntok.get() -> get_client();' – mrlenbenquet
Вот что я пробовал: 'станд :: shared_ptr ConnectTo(); 'возвращает smart_ptr к моей основной функции. 'BOOL disconnectFrom (станд :: shared_ptr маркер)' использует этот маркер, чтобы отключить с помощью: 'token-> get_client() -> Отключить();' я не получаю никаких ошибок во время компиляции, но при попытке отсоединения получить ошибку сегментации. Я предполагаю, что это потому, что этот токен больше не связан с клиентом, поэтому указатель ведет никуда. –
mrlenbenquet