OpenDDS和发布者在场通知

问题:如何获得展位发布者连接和断开连接的活跃度通知? 背景: 我正在使用OpenDDS实现,我有一个发布者和数据类型(dt)的订阅者,使用相同的主题,位于不同的计算机上。 用户端的阅读器已经覆盖了
on_data_available(...)
on_liveliness_changed(...)
的实现。我的订户首先启动,导致回拨到
on_liveliness_changed(...)
,表示没有可用的编写器。当发布者启动时,我得到一个新的回调告诉我有一个可用的作者,当发布者发布时,调用
on_data_available(...)
。到目前为止,一切都按预期工作。 出版商的作者有一个被覆盖的
on_publication_matched(...)
实现。启动发布者时,由于我们已经启动了订阅者,因此会调用
on_publication_matched(...)
。 问题是,当发布者断开连接时,我在读者端没有回复
on_liveliness_changed(...)
,也没有在再次启动发布者时获得新的回调。 我试图通过设置
readerQos.liveliness.lease_duration
来改变readerQos。 但结果是
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) );
/的Kristofer     
已邀请:
好吧,猜测这里的DDS用户不多。 经过一些研究后,我发现只有满足此兼容性标准才会发生读写器匹配:提供的lease_duration&lt; = requested lease_duration 解决方案是将作者QoS设置为提供相同的活力。可能有一种方法可以检查相应编写器是否可以提供所请求的读取器QoS,如果没有,则使用“较低”的QoS,所有我还没有尝试过。 在on_liveliness_changed回调方法中,我只是在LivelinessChangedStatus中评估了alive_count。 /的Kristofer     

要回复问题请先登录注册