2.以数据为中心的订阅发布(DCPS)
2.2 平台无关模型(Platform Independent Model ,PIM)
2.2.2 平台无关模型(PIM)描述
2.2.2.3.5 TopicListener接口
由于Topic是一种实体(Entity),因此它具有关联监听器的能力。在这种情况下,关联的监听器应该具有具体类型TopicListener。
2.2.2.3.6 TypeSupport接口
TypeSupport接口是一个抽象接口,必须根据应用程序使用的具体类型进行定制。
此接口要求DDS服务的实现方提供自动的方法,该方法通过类型的描述生成此类型特定的类(例如在OMG IDL映射中使用IDL)。必须先在此类型特定的类上使用register_type方法注册TypeSupport,然后才能使用它创建Topic对象。
2.2.2.3.6.1 register_type
此方法允许应用程序告知DDS服务其存在的数据类型。该方法的实现包含了需要传递给中间件的所有知识,使得中间件能够管理该数据类型的数据内容。实现还特别地包含了允许DDS服务区分相同类型的不同实例的关键字(Key)定义。
在同一个DomainParticipant中使用相同的type_name注册两个不同的TypeSupport是一种“前提条件错误”。如果应用程序尝试此操作,此方法将失败并返回PRECONDITION_NOT_MET。但是,允许在同一个DomainParticipant中使用相同或不同的type_name值多次注册相同的TypeSupport。如果在一个DomainParticipant中使用相同的type_name在同一个TypeSupport上多次调用register_type,则忽略第二个(和后续)register_type,方法返回正常值OK。
应用程序可以将nil作为type_name的值。在这种情况下,将使用由TypeSupport定义的默认类型名称(即get_type_name方法的返回值)。
除标准错误代码外,还可能返回错误代码:PRECONDITION_NOT_MET和OUT_OF_RESOURCES。
2.2.2.3.6.2 get_type_name
此方法返回TypeSupport代表的数据类型的默认名称。
2.2.2.3.7 应用程序类的派生类
对于应用程序定义的数据类,需要定制的类来促进应用程序与DDS服务之间的类型安全交互。
DDS服务的每个实现方都需要提供自动生成这些特定于类型的类的方法。 TypeSupport是这些自动生成的类必须实现的接口之一。假设应用程序数据类型为“Foo”,为该类型创建的完整自动类集如图2.8所示。
图 2 8 为名为Foo的应用程序数据类型自动创建的类