问题:如何获取展位发布者连接和断开的活跃度通知?
背景:我正在使用 OpenDDS 实现,其中有一个数据类型 (dt) 的发布者和订阅者,使用相同的主题,位于不同的计算机上。
订户端的阅读器已重写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) );
Run Code Online (Sandbox Code Playgroud)
/克里斯托弗