私は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();
}
私は私のコードは次のように整理することにしたいです私は(私はいくつかのデータを送信するたびに切断/再接続を避けるために)3つの別々の関数内のコードのそれらの作品を持っていると思いますが
私はMQTTを使用する必要があることを推測:: itoken_ptrはclient.connect()から返されをconntokが、このオブジェクトはget_client()機能を持っていない、唯一のMQTT:トークンはありません。
ドキュメントでは、async_clientクラスのポインタがあることを示していますstd :: shared_ptr ptr_tしかし、私はC++をかなり新しく使っているので、どのように使用するのかは分かりません。実際のクライアントオブジェクトはprivate(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'](のhttp:// EN .cppreference.com/w/cpp/memory/shared_ptr)。 –
ありがとうございます。私はこのドキュメントを読んでいましたが、クライアントを取得する方法を理解できませんでした。 私は(それは抽象的なので)itoken_ptrを返すことができない、とMQTTを返すことができません。iasync_clientいずれか 'conntok.get()によって返される - > get_client();ここで' – mrlenbenquet
は、私が試したものです: 'STD :: shared_ptr connectTo(); '私のmain関数にsmart_ptrを返します。 'ブールdisconnectFrom(STD :: shared_ptrのトークン)'使用して接続を切断するために、このトークンを使用しています。 'token-> get_client() - >切断();' 私は時のエラーを取得していませんコンパイルするが、切断しようとしている間にセグメンテーションフォルトが発生する。このトークンはもはやクライアントに関連付けられていないので、ポインタはどこにも行きません。 –
mrlenbenquet