問題: ブース パブリッシャの接続と切断の活性通知を取得するにはどうすればよいですか?
背景: 私は、同じトピックを使用して、データ型 (dt) のパブリッシャーとサブスクライバーが別々のコンピューターにある OpenDDS 実装を使用しています。
サブスクライバー側のリーダーは、 と の実装をオーバーライドしon_data_available(...)
ましたon_liveliness_changed(...)
。私のサブスクライバーが最初に開始され、on_liveliness_changed(...)
利用可能なライターがいないことを示すコールバックが発生します。パブリッシャーが開始されると、ライターが利用可能であることを知らせる新しいコールバックを取得し、パブリッシャーがパブリッシュするon_data_available(...)
と呼び出されます。これまでのところ、すべてが期待どおりに機能しています。
パブリッシャーのライターには、オーバーライドされた実装がありon_publication_matched(...)
ます。on_publication_matched(...)
サブスクライバーが既に開始されているため、パブリッシャーを開始するときに呼び出されます。
問題は、パブリッシャーが切断されたときにon_liveliness_changed(...)
、リーダー側でコールバックが得られず、パブリッシャーが再び開始されたときに新しいコールバックが得られないことです。
を設定して、readerQos を変更しようとしましたreaderQos.liveliness.lease_duration
。しかし、その結果、on_data_available(...)
が呼び出されることはなく、への唯一のコールバックon_liveliness_changed(...)
は起動時であり、パブリッシャーが存在しないことがわかります。
DDS::DataReaderQos readerQos;
DDS::StatusKind mask = DDS::DATA_AVAILABLE_STATUS | DDS::LIVELINESS_CHANGED_STATUS | DDS::LIVELINESS_LOST_STATUS ;
m_subscriber->get_default_datareader_qos( readerQos );
DDS::Duration_t t = { 3, 0 };
readerQos.liveliness.lease_duration = t;
m_binary_Reader = static_cast<binary::binary_tdatareader( m_subscriber->create_datareader(m_Sender_Topic,readerQos,this, mask, 0, false) );
/クリストファー