DDS (Data Distribution Service) 数据分发服务-规范中文翻译_006
2.以数据为中心的订阅发布(DCPS)
2.2 平台无关模型(Platform Independent Model ,PIM)
2.2.2 平台无关模型(PIM)描述
2.2.2.2 域模块
DCPS域模块由以下类组成:
- DomainParticipant
- DomainParticipantFactory
- DomainParticipantListener
2.2.2.2.1 DomainParticipant类
DomainParticipant对象扮演多个角色:
- 它充当所有其他Entity对象的容器。
- 它充当Publisher,Subscriber,Topic和MultiTopic Entity对象的工厂。
- 它表示应用程序在通信平面上的参与,该通信平面将在同一物理计算机上运行的应用程序彼此隔离。域建立“虚拟网络”,链接共享相同domainId的所有应用程序,并将它们与在不同域上运行的应用程序隔离。通过这种方式,独立的分布式应用程序可以在同一物理网络中共存,而不会干扰甚至了解彼此。
- 它在域中提供管理服务,允许应用程序在本地“忽略”与给定参与者(ignore_participant),发布(ignore_publication),订阅(ignore_subscription)或主题(ignore_topic)有关的任何信息。
以下详细说明了所有方法。
即使未启用DomainParticipant,也可以调用以下方法。除此以外如果在禁用的DomainParticipant上调用其他方法,则返回NOT_ENABLED:
-
在基类级别定义的方法,即set_qos,get_qos,set_listener,get_listener和enable。
-
工厂方法:create_topic,create_publisher,create_subscriber,delete_topic,delete_publisher,delete_subscriber
-
访问状态的方法:get_statuscondition
2.2.2.2.1.1 create_publisher
此方法将创建具有所需QoS策略的Publisher,并将指定的PublisherListener附加到该Publisher。
如果指定的QoS策略不一致,方法调用将失败,且不会创建Publisher。
特殊值PUBLISHER_QOS_DEFAULT表明应使用工厂中设置的默认Publisher QoS创建Publisher。使用这个特殊值等同于应用程序通过get_default_publisher_qos(2.2.2.2.1.21)方法获取默认Publisher QoS并使用返回的QoS创建Publisher。
创建的Publisher隶属于作为其工厂的DomainParticipant。
如果方法调用失败,将返回“nil”值(由平台指定)。
2.2.2.2.1.2 delete_publisher
此方法将删除现有的Publisher。
如果Publisher还有需要管理的DataWriter对象,则无法将该Publisher删除。在这种情况下调用delete_publisher方法,将返回PRECONDITION_NOT_MET。
必须在创建Publisher的同一DomainParticipant对象上调用delete_publisher方法。如果在另一个DomainParticipant上调用delete_publisher,该方法将不起作用,返回PRECONDITION_NOT_MET。
除标准错误代码外,还可能返回错误代码:PRECONDITION_NOT_MET。
2.2.2.2.1.3 create_subscriber
此方法将创建具有所需QoS策略的Subscriber,并将指定的SubscriberListener附加到该Subscriber。
如果指定的QoS策略不一致,方法调用将失败,且不会创建Subscriber。
特殊值SUBSCRIBER_QOS_DEFAULT表明应使用工厂中设置的默认Subscriber QoS创建Subscriber。使用这个特殊值等同于应用程序通过get_default_subscriber_qos(2.2.2.2.1.23)方法获取默认Subscriber QoS并使用返回的QoS创建Subscriber。
创建的Subscriber隶属于作为其工厂的DomainParticipant。
如果方法调用失败,将返回“nil”值(由平台指定)。
2.2.2.2.1.4 delete_subscriber
此方法将删除现有的Subscriber。
如果Subscriber还有需要管理的DataReader对象,则无法将该Subscriber删除。在这种情况下调用delete_subscriber方法,将返回PRECONDITION_NOT_MET。
必须在创建Subscriber的同一DomainParticipant对象上调用delete_subscriber方法。如果在另一个DomainParticipant上调用delete_subscriber,该方法将不起作用,返回PRECONDITION_NOT_MET。
除标准错误代码外,还可能返回错误代码:PRECONDITION_NOT_MET。
2.2.2.2.1.5 create_topic
此方法创建具有所需QoS策略的Topic,并将指定的TopicListener附加到该Topic。
如果指定的QoS策略不一致,方法调用将失败,并且不会创建Topic。
特殊值TOPIC_QOS_DEFAULT表明应使用工厂中设置的默认Topic QoS创建Topic。使用这个特殊值等同于应用程序通过get_default_topic_qos(2.2.2.2.1.25)方法获取默认Topic QoS并使用返回的QoS创建Topic。
创建的Topic隶属于作为其工厂的DomainParticipant。
Topic需要绑定type_name参数描述的类型。在创建Topic之前,必须在服务中完成该类型的注册。这是在TypeSupport接口的派生类上使用register_type方法完成的,如2.2.2.3.6 TypeSupport接口中所述。
如果方法调用失败,将返回“nil”值(由平台指定)。
2.2.2.2.1.6 delete_topic
此方法将删除一个Topic。
如果还有存在的DataReader,DataWriter,ContentFilteredTopic或MultiTopic需要使用该Topic,则无法将该Topic删除。在这种情况下调用delete_topic方法,将返回PRECONDITION_NOT_MET。
必须在创建Topic的同一DomainParticipant对象上调用delete_topic方法。如果在另一个DomainParticipant上调用delete_topic,该方法将不起作用,返回PRECONDITION_NOT_MET。
除标准错误代码外,还可能返回错误代码:PRECONDITION_NOT_MET。