Fast DDS之Subscriber

编程入门 行业动态 更新时间:2024-10-23 11:28:57

<a href=https://www.elefans.com/category/jswz/34/1764965.html style=Fast DDS之Subscriber"/>

Fast DDS之Subscriber

目录

  • Subscriber
    • SubscriberQos
    • SubscriberListener
    • 创建Subscriber
  • DataReader
  • SampleInfo
  • 读取数据


Subscriber扮演容器的角色,里面可以有很多DataReaders,它们使用Subscriber的同一份SubscriberQos配置。Subscriber可以承载不同Topic和数据类型的DataReader对象。

Subscriber

SubscriberQos

默认Qos配置可以通过DomainParticipant实例的get_default_subscriber_qos()函数获取。

SubscriberListener

Subscriber的状态改变会触发SubscriberListener的回调函数调用。用户可以通过继承实现自定义回调。新增callback:on_data_on_readers()

创建Subscriber

通过DomainParticipant的create_subscriber()函数创建,SubscriberQos参数是必需的,SubscriberListener和StatusMask参数可选。

// 创建DomainParticipant实例participant
Subscriber* subscriber_with_default_qos = participant->create_subscriber(SUBSCRIBER_QOS_DEFAULT);
if (nullptr == subscriber_with_default_qos) {// Errorreturn;
}

基于Profile创建Subscriber:用于标识subscriber的字符串名字参数是必需的,listener和StatusMask是可选的

Subscriber* subscriber_with_profile = participant->create_subscriber_with_profile("subscriber_profile");
if (nullptr == subscriber_with_profile) {// Errorreturn;
}

删除Subscriber:需要先删除Subscriber中的所有实体(DataReaders),再调用 delete_subscriber() 删除Subscriber

// Delete the entities the subscriber created
if (subscriber->delete_contained_entities() != ReturnCode_t::RETCODE_OK) {// Subscriber failed to delete the entities it createdreturn;
}
// Delete the Subscriber
if (participant->delete_subscriber(subscriber) != ReturnCode_t::RETCODE_OK) {// Errorreturn;
}

DataReader

DataReader只归属于创建它的Subscriber,每个DataReader在它创建支持绑定到单一的Topic上,所以Topic必须是在DataReader创建之前就已经创建。可以通过DataReader::read_next_sample()或DataReader::take_next_sample()函数获取pub端写入的数据。
DataReaderQos
DataReaderListener用于监听DataReader状态的改变。有以下callback成员函数:

  • on_data_available
  • on_subscription_matched
    创建一个DataReader:绑定到要传输数据的Topic和DataReaderQos是必需的参数,DataReaderListener和StatusMask是可选的
DataReader* data_reader_with_default_qos = subscriber->create_datareader(topic, DATAREADER_QOS_DEFAULT);
if (nullptr == data_reader_with_default_qos) {// Errorreturn;
}

基于Profile创建DataReader
使用自定义的PayloadPool创建DataReader(为什么要使用自定义的PayloadPool?)

// A DataReaderQos must be provided to the creation method
DataReaderQos qos;// Create PayloadPool
std::shared_ptr<CustomPayloadPool> payload_pool = std::make_shared<CustomPayloadPool>();
DataReader* data_reader = subscriber->create_datareader(topic, qos, nullptr, StatusMask::all(), payload_pool);
if (nullptr == data_reader) {// Errorreturn;
}

删除DataReader
同理,删除DataReader之前需要删除所有属于DataReader的实体(QueryConditions)

// Delete the entities the DataReader created
if (data_reader->delete_contained_entities() != ReturnCode_t::RETCODE_OK) {// DataReader failed to delete the entities it created.return;
}// Delete the DataReader
if (subscriber->delete_datareader(data_reader) != ReturnCode_t::RETCODE_OK) {// Errorreturn;
}

SampleInfo

读取数据

更多推荐

Fast DDS之Subscriber

本文发布于:2023-12-07 11:14:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1671085.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Fast   DDS   Subscriber

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!