0

async_client を使用する場合の Paho MQTT C++ ライブラリのさまざまなコールバック メカニズムの使用法と動作を理解しようとしています。具体的には次のとおりです。

  • mqtt::コールバック
  • mqtt::iaction リスナー
  • mqtt::connection_handler

私が達成しようとしているもの:接続が成功し、トピックのリスト(最初に単一のトピック)へのサブスクリプションが成功するのを待つブロッキング初期化メソッドに加えて、接続が切断された場合にそれらのトピックへの自動再接続サブスクリプションアウト。

「async_subscribe」サンプル ( https://github.com/eclipse/paho.mqtt.cpp/blob/master/src/samples/async_subscribe.cpp ) は、mqtt::callback::connected でトピックをサブスクライブする必要があることを示唆しています。ただし、サブスクリプションが正常に完了するまで待機する方法は示されていません。私の理解では、接続されたコールバック内のサブスクライブ トークンで「待機」を呼び出すべきではないということです。待機するプライベート var _subscribeToken を設定した場合、接続トークンが完了するのを待った後に設定されているかどうかは保証されないようです。つまり、(疑似コード):

void Callback::connected(const std::string& cause){
    _subscribeToken = _client->subscribe(topic, qos, nullptr, action_listener);
}

初期化中:

token_ptr connectToken = connect(connectOpts);
connectToken->wait();

_subscribeToken->wait(); // but _subscribeToken may still be null at this point. 

コールバックがまだ呼び出されていることを保証しない場合、connectToken->wait のポイントは何ですか? 私は何かを誤解している可能性が非常に高いですが、正しい方向に向けたいです!

4

1 に答える 1