我正在使用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