FastDDS 源码剖析:DDS部分 - types&DomainParticipant分析

目录

types分析

DomainParticipant分析

        DomainParticipant的主要作用

        DomainParticipant实现的一些关键原理:

        源码剖析


types分析

位于src/cpp/dds中的types.cpp文件和位于include/dds/core中的types.hpp文件是FastDDS库的核心实现的一部分。

hpp文件是声明null_type类的头文件。该类用于表示FastDDS库中的空值。null_type类没有任何成员变量或函数,因为它只用作空值的占位符。

cpp文件是定义空对象的源文件。该对象是null_type类的一个实例,在整个FastDDS库中用于表示空值。

#include <dds/core/types.hpp>

using namespace dds::core;

OMG_DDS_API const null_type dds::core::null;

当FastDDS在Windows上作为共享库构建时,OMG_DDS_API宏用于指定null对象的DLL接口。在其他平台上,OMG_DDS_API被定义为空宏,没有任何作用。

总之,types.cpp和types.hpp用于定义一个特殊的空对象,该对象表示FastDDS库中的空值。

DomainParticipant分析

源码主要在 src/cpp/dds/domain/DomainParticipant.cpp 下,在DDS体系结构中,DomainParticipant代表着在特定DDS域中参与发布和订阅数据的应用程序实体。

DomainParticipant的主要作用
  1. 加入或离开特定的DDS域:DDS域是指一组应用程序实体(如发布者、订阅者、主题),它们共享相同的配置和数据分发策略。DomainParticipant允许应用程序在一个给定的DDS域中发布或订阅数据。
  2. 创建和销毁发布者、订阅者和主题:DomainParticipant充当工厂,用于在参与的域中创建和销毁发布者、订阅者和主题实例。
  3. 管理QoS(Quality of Service)策略:DomainParticipant允许应用程序配置和管理各种QoS策略,以满足不同的实时通信需求。
  4. 提供发现服务:DomainParticipant负责实现DDS发现协议,以便在参与的域中自动发现其他参与者、发布者、订阅者和主题。
DomainParticipant实现的一些关键原理:
  1. 实例化DomainParticipant时,需要提供一个域ID。这个ID用于在DDS体系结构中唯一标识一个特定的域。Fast-DDS还允许用户选择特定的参与者发现协议和传输配置。
  2. DomainParticipant类内部包含发布者和订阅者实例的集合。使用create_publisher()和create_subscriber()方法,可以在参与的域中创建新的发布者或订阅者实例。
  3. DomainParticipant还提供了用于创建和删除主题的方法,如create_topic()和delete_topic()。主题是发布者和订阅者之间共享的数据通信通道。
  4. Fast-DDS通过使用基于插件的体系结构实现了多种发现协议。DomainParticipant负责协调和管理这些发现插件,以实现自动发现和通信。
  5. DomainParticipant负责管理QoS策略,例如可靠性、持久性、延迟预算等,以满足不同的应用程序需求。
源码剖析

include/fastdds/dds/domain/DomainParticipant.hpp

类图如下:

类思维导图如下:

  1. 构造函数和析构函数:
    • DomainParticipant(): 构造函数,用于创建一个新的DomainParticipant实例。
    • ~DomainParticipant(): 析构函数,用于销毁DomainParticipant实例及其相关资源。
  1. create_publisher / create_publisher_with_profile:创建发布者对象。这两个方法用于在DomainParticipant中创建一个发布者。create_publisher使用提供的QoS和监听器创建发布者,而create_publisher_with_profile使用指定的配置文件创建发布者。在内部,这些方法通过调用DomainParticipantImpl的相关方法创建一个PublisherImpl实例,并将其封装在Publisher对象中。
  2. delete_publisher:删除发布者对象。此方法用于在DomainParticipant中删除一个已创建的发布者。它通过调用DomainParticipantImpl的相关方法从内部数据结构中移除发布者实例。
  3. create_subscriber / create_subscriber_with_profile:创建订阅者对象。这两个方法用于在DomainParticipant中创建一个订阅者。create_subscriber使用提供的QoS和监听器创建订阅者,而create_subscriber_with_profile使用指定的配置文件创建订阅者。在内部,这些方法通过调用DomainParticipantImpl的相关方法创建一个SubscriberImpl实例,并将其封装在Subscriber对象中。
  4. delete_subscriber:删除订阅者对象。此方法用于在DomainParticipant中删除一个已创建的订阅者。它通过调用DomainParticipantImpl的相关方法从内部数据结构中移除订阅者实例。
  5. create_topic / create_topic_with_profile:创建主题对象。这两个方法用于在DomainParticipant中创建一个主题。create_topic使用提供的主题属性和类型支持创建主题,而create_topic_with_profile使用指定的配置文件创建主题。在内部,这些方法通过调用DomainParticipantImpl的相关方法创建一个TopicImpl实例,并将其封装在Topic对象中。
  6. delete_topic:删除主题对象。此方法用于在DomainParticipant中删除一个已创建的主题。它通过调用DomainParticipantImpl的相关方法从内部数据结构中移除主题实例。
  7. get_qos / get_subscriber_qos_from_profile:获取QoS策略。这两个方法用于获取DomainParticipant的QoS策略。get_qos获取当前DomainParticipant的QoS,而get_subscriber_qos_from_profile使用指定的配置文件获取订阅者的QoS。这些方法通过调用DomainParticipantImpl的相关方法获取QoS实例。
  8. set_qos:设置QoS策略。此方法用于设置DomainParticipant的QoS策略。它通过调用DomainParticipantImpl的相关方法设置QoS实例。
  9. set_default_topic_qos:设置默认主题QoS。此方法用于设置DomainParticipant的默认主题QoS。它通过调用DomainParticipantImpl的相关方法设置默认主题QoS实例。
  10. get_default_topic_qos:获取默认主题QoS。此方法用于获取DomainParticipant的默认主题QoS。它通过调用DomainParticipantImpl的相关方法获取默认主题QoS实例。
  11. set_default_subscriber_qos:设置默认订阅者QoS。此方法用于设置DomainParticipant的默认订阅者QoS。它通过调用DomainParticipantImpl的相关方法设置默认订阅者QoS实例。
  12. get_default_subscriber_qos:获取默认订阅者QoS。此方法用于获取DomainParticipant的默认订阅者QoS。它通过调用DomainParticipantImpl的相关方法获取默认订阅者QoS实例。
  13. get_listener:获取DomainParticipantListener对象。此方法用于获取DomainParticipant的监听器。它通过调用DomainParticipantImpl的相关方法获取监听器实例。
  14. set_listener:设置DomainParticipantListener对象。此方法用于设置DomainParticipant的监听器。它通过调用DomainParticipantImpl的相关方法设置监听器实例。
  15. enable:启用DomainParticipant。此方法用于启用DomainParticipant,以便它可以开始发布和订阅消息。在内部,它通过调用DomainParticipantImpl的相关方法启用实例。
  16. find_topic:查找主题对象。此方法用于在DomainParticipant中查找指定名称的主题。在内部,它通过调用DomainParticipantImpl的相关方法从内部数据结构中检索主题实例。
  17. lookup_topicdescription:查找主题描述对象。此方法用于在DomainParticipant中查找指定名称的主题描述。在内部,它通过调用DomainParticipantImpl的相关方法从内部数据结构中检索主题描述实例。
  18. get_builtin_subscriber:获取内建订阅者对象。此方法用于获取DomainParticipant的内建订阅者,用于访问内建主题。它通过调用DomainParticipantImpl的相关方法获取内建订阅者实例。
  19. ignore_participant:忽略远程域参与者。此方法用于指示DomainParticipant忽略与指定域参与者关联的所有数据。在内部,它通过调用DomainParticipantImpl的相关方法将忽略指令传递给底层通信层。
  20. get_discovered_topic_data:检索已发现的未被忽略的主题的数据。此方法用于获取DomainParticipant已发现但未被忽略的主题的相关数据。它通过调用DomainParticipantImpl的相关方法从内部数据结构中检索主题数据。
  21. register_type:注册类型。此方法用于在DomainParticipant中注册一个用户定义的数据类型。在内部,它通过调用DomainParticipantImpl的相关方法将类型支持实例添加到内部数据结构中。
  22. unregister_type:注销类型。此方法用于在DomainParticipant中注销一个已注册的数据类型。在内部,它通过调用DomainParticipantImpl的相关方法从内部数据结构中移除类型支持实例。
  23. assert_liveliness:断言DomainParticipant的生存期。此方法用于通知底层通信层DomainParticipant仍然活跃。在内部,它通过调用DomainParticipantImpl的相关方法将生存期断言传递给底层通信层。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ym影子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值