Entity是所有 DDS 实体的抽象基类,表示支持 QoS 策略、侦听器和状态的对象。
DomainParticipant:该实体是服务的入口点,充当发布者、订阅者和主题的工厂。有关详细信息,请参阅DomainParticipant。
Publisher:它充当可以创建任意数量的 DataWriters 的工厂。有关详细信息,请参阅发布者。
订阅者:它充当可以创建任意数量的 DataReader 的工厂。有关详细信息,请参阅订阅者。
主题:该实体适合发布和订阅实体之间,并充当渠道。有关详细信息,请参阅主题。
DataWriter:是负责数据分发的对象。有关详细信息,请参阅DataWriter。
DataReader:是用来访问接收到的数据的对象。有关详细信息,请参阅DataReader。
下图显示了所有 DDS 实体之间的层次结构:

所有实体类型都共享一些实体概念共有的特征。那些是:
每个实体都由一个唯一的 ID 标识,该 ID 在 DDS 实体及其对应的 RTPS 实体之间共享(如果存在)。该 ID 存储在 Entity 基类上声明的 Instance Handle 对象中,可以使用 getter 函数访问该对象get_instance_handle()。
每个实体的行为都可以使用一组配置策略进行配置。对于每个实体类型,都有一个相应的服务质量 (QoS) 类,它将影响所述实体类型的所有策略分组。用户可以创建这些 QoS 类的实例,根据他们的需要修改包含的策略,并使用它们来配置实体,无论是在创建期间还是在以后使用set_qos() 每个实体公开的功能(DomainParticipant::set_qos()、Publisher::set_qos()、 Subscriber::set_qos()、Topic::set_qos()、DataWriter::set_qos())DataReader::set_qos()。有关可用策略及其描述的列表,请参阅策略。每个实体类型的文档中解释了 QoS 类及其包含的策略。
侦听器是具有实体将调用以响应事件的函数的对象。因此,侦听器充当异步通知系统,允许实体通知应用程序有关实体中的状态更改。
所有实体类型都定义了一个抽象侦听器接口,其中包含实体将触发的回调函数,以将状态更改传达给应用程序。用户可以实现他们自己的侦听器,从这些接口继承并实现其应用程序所需的回调。然后他们可以将这些侦听器链接到每个实体,无论是在创建期间还是在稍后使用 set_listener()每个实体公开的函数(DomainParticipant::set_listener()、Publisher::set_listener()、 Subscriber::set_listener()、Topic::set_listener()、DataWriter::set_listener()、 DataReader::set_listener())。每个实体类型的侦听器接口及其回调在每个实体类型的文档中进行了说明。当事件发生时,它由具有非空侦听器的最低级别实体处理,并在其中启用相应的回调StatusMask. 较高级别的侦听器继承自较低级别的侦听器,如下图所示:

on_data_on_readers()回调拦截之前 的消息on_data_available()。这意味着如果DomainParticipantListener启用,用户应考虑默认情况下侦听器使用StatusMask::all(). 由于保留了回调实体层次结构,因此on_data_on_readers()在这种情况下将调用 。如果应用程序想要使用,则应禁用on_data_available()相应的位 。
StatusMask
StatusMask::none()在创建时使用唯一Entity会禁用 DDS 标准回调。任何特定于Fast DDS的回调始终处于启用状态。
只创建一个线程来侦听每个实现的侦听器,因此鼓励使侦听器函数保持简单,将此类信息的处理留给适当的类。
不要在 Listener 成员函数的范围内创建或删除任何实体,因为它可能导致未定义的行为。建议改为使用 Listener 类作为信息通道,并使用上层 Entity 类来封装此类行为。
每个实体都与一组状态对象相关联,这些状态对象的值表示该实体的通信状态 。这些状态值的更改会触发适当的侦听器回调的调用以异步通知应用程序。有关所有状态对象的列表及其内容的描述,请参阅状态。您还可以在此处找到适用于哪种实体类型的状态。
每个实体都拥有一个 StatusCondition,只要其启用的状态发生变化,就会收到通知。StatusCondition 提供实体和等待集之间的链接。有关详细信息,请参阅条件和等待集部分。
所有实体都可以创建启用或未启用。默认情况下,工厂配置为创建启用的实体,但可以使用启用的工厂上的EntityFactoryQosPolicy更改它。禁用的工厂会创建禁用的实体,而不管其 QoS。禁用实体的操作仅限于以下操作:
设置/获取实体 QoS 策略。
设置/获取实体监听器。
创建/删除子实体。
获取实体的状态,即使它们不会改变。
查找操作。
在此状态下调用的任何其他函数都将返回NOT_ENABLED。