DDS (Data Distribution Service) 数据分发服务-规范中文翻译_014
2.以数据为中心的订阅发布(DCPS)
2.2 平台无关模型(Platform Independent Model ,PIM)
2.2.2 平台无关模型(PIM)描述
2.2.2.4 发布模块
图 2 9 DCPS发布模块的类模型
DCPS发布模块由以下类组成:
- Publisher
- DataWriter
- PublisherListener
- DataWriterListener
2.2.2.4.1 Publisher类
发布者(Publisher)类是负责实际数据发布的对象。
发布者(Publisher)代表属于它的一个或多个数据写入者(DataWriter)对象。当其中一个DataWriter对象关联的数据发生改变时,发布者决定何时真正发送数据更新消息。在做出此决定时,发布者会考虑与数据有关的(时间戳,写入者等)以及与发布者(Publisher)和数据写入者(DataWriter)的QoS有关的额外信息,根据这些信息判断何时执行数据发送或者取消数据发送。
除基类方法set_qos,get_qos,set_listener,get_listener,enable,get_statuscondition,create_datawriter和delete_datawriter之外的所有方法都可能返回NOT_ENABLED。
2.2.2.4.1.1 set_listener (来自实体类Entity)
通过扩展实体(Entity)类,发布者(Publisher)可以在创建时或创建后使用set_listener方法将其与监听器(Listener)进行绑定。附加的Listener必须继承自PublisherListener。
监听器在2.2.4 监听器,条件和等待集中描述。
2.2.2.4.1.2 get_listener (来自实体类Entity)
获取Publisher附加绑定的PublisherListener。
2.2.2.4.1.3 set_qos (来自实体类Entity)
通过扩展实体(Entity)类,发布者(Publisher)可以在创建时或创建后使用set_qos方法设置QoS策略。关于可以在Publisher上设置的QoS策略,请参阅2.2.3 支持的QoS。
除标准错误代码外,还可能返回错误代码:IMMUTABLE_POLICY,INCONSISTENT_POLICY。
2.2.2.4.1.4 get_qos (来自实体类Entity)
此方法允许访问QoS策略的取值。
2.2.2.4.1.5 create_ datawriter
此方法将创建一个DataWriter。返回的DataWriter将附加并属于此Publisher。
create_datawriter方法返回的DataWriter实际上是一个派生类,特定于与主题关联的数据类型。如2.2.2.3.7所述,对于每个应用程序定义的数据类型“Foo”,都有一个隐含的,自动生成的类FooDataWriter,它扩展了DataWriter并包含写入“Foo”类型数据的方法。
如果方法调用失败,将返回“nil”值(由平台指定)。
请注意,为DataWriter构建QoS的常见模式如下:
- 通过主题(Topic)对象的get_qos方法获取关联主题(Topic)的QoS策略。
- 通过Publisher对象的get_default_datawriter_qos方法获取默认的DataWriter QoS。
- 结合上述两种QoS策略,根据需要有选择地修改。
- 使用生成的QoS策略创建DataWriter。
特殊值DATAWRITER_QOS_DEFAULT表明应使用工厂中设置的默认DataWriter QoS创建DataWriter。使用这个特殊值等同于应用程序通过get_default_datawriter_qos(2.2.2.4.1.15)方法获取默认DataWriter QoS并使用获得的QoS创建DataWriter。
特殊值DATAWRITER_QOS_USE_TOPIC_QOS表明应使用默认DataWriter QoS和Topic QoS组合创建DataWriter。使用此值等同于应用程序获取默认DataWriter QoS和Topic QoS(通过方法Topic :: get_qos),然后使用copy_from_topic_qos方法组合这两个QoS,从而使用Topic QoS中设置的QoS策略“覆盖”对应的默认QoS策略。最终将生成的QoS用于创建DataWriter。
传递给方法的主题(Topic)所在的DomainParticipant必须与创建此Publisher的DomainParticipant相同。如果主题是在其他DomainParticipant中创建,则此方法将失败并返回nil。
2.2.2.4.1.6 delete_datawriter
此方法删除属于Publisher的DataWriter。
必须在创建DataWriter的同一Publisher对象上调用delete_datawriter方法。如果在另一个Publisher上调用delete_datawriter,该方法将不起作用,并返回PRECONDITION_NOT_MET。
删除DataWriter将自动取消注册所有实例。 根据WRITER_DATA_LIFECYCLE QosPolicy,删除DataWriter也可以处理所有数据实例。详细信息请参阅2.2.3.21。
除标准错误代码外,还可能返回错误代码:PRECONDITION_NOT_MET。