FastDDS 源码剖析:DDS部分 - typesDomainParticipant分析

news2024/10/6 2:24:01

目录

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的相关方法将生存期断言传递给底层通信层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【链表OJ】链表分割

⭐️ 往期相关文章 &#x1f4ab;链接1&#xff1a;链表中倒数第k个结点(快慢指针问题) &#x1f4ab;链接2&#xff1a;leetcode 876.链表的中间结点(快慢指针问题) &#x1f4ab;链接3&#xff1a;leetcode 206.反转链表 &#x1f4ab;链接4&#xff1a;leetcode 203.移除链…

[Golang实战] sql建表,不用外键,多个表之间如何建立起联系?

问题描述 下面是我的建表语句&#xff0c;在其中我并没有使用到外键&#xff0c;去关联三个表&#xff0c;但是我发现三个表中具有隐式的关联关系 create database library; use library; DROP TABLE IF EXISTS user;CREATE TABLE user(id bigint(20) NOT NULL AUTO_INCREMEN…

Java基础-多线程JUC-线程池和自定义线程池

1. 线程池 主要核心原理 不推荐Executors创建没有上线的线程池&#xff0c;建议使用自定义的线程池&#xff1b; Java工具类创建线程池&#xff1b; public class demo16 {public static void main(String[] args) {/*** public static ExecutorService newCachedThreadPoo1() …

一款打击感超强的动作游戏《流星蝴蝶剑》

文章目录 玩法介绍1.介绍2.按键操作3.流星蝴蝶剑各种武器招式秘籍 游戏优点游戏缺点游戏停服的原因游戏后续发展常见的的游戏道具1.四种水晶2.四种包子3.多种属性加成道具 《流星蝴蝶剑》的游戏打击感分析1.什么是游戏打击感2.影响游戏打击感的经典要素3.几个体现打击感的镜头动…

国产自研GPT大语言模型|实在智能TARS

目录 前言 TARS名字由来 实在智能 TARS 应用演示 大模型RPA 大模型IDP 最后 前言 Chat-GPT问世以来&#xff0c;国内外知名公司纷纷加入到大模型的研发行列中&#xff0c;2023年无疑成为大模型发展元年。百度、谷歌等科技巨头百家争鸣&#xff0c;新锐科技公司也不甘…

成为自动化测试的7种技能

目录 前言&#xff1a; 1.自动化测试员技能——编程语言 设计框架 2.自动化测试员技能–出色的手动测试技能 人眼就是一切 某些测试只能手动完成 自动化测试可能包含漏洞 某些方案不适用于自动化测试 您对整个问题都有个想法 3.自动化测试员技能–自动化工具专业知识…

【教你做直播产品】线上K歌软件开发技术选型

摘要 在线K歌软件的开发有许多技术难点&#xff0c;需考虑到音频录制和处理、实时音频传输和同步、音频压缩和解压缩、设备兼容性问题等技术难点外&#xff0c;此外&#xff0c;开发者还应关注音乐版权问题&#xff0c;确保开发的应用合规合法。 前言 前面写了几期关于直播 …

中小企业如何应用大数据?_光点科技

随着信息技术的快速发展&#xff0c;大数据已经成为当今商业世界中的热门话题。大数据不仅对大型企业有益&#xff0c;对中小企业同样具有巨大潜力。然而&#xff0c;很多中小企业对于如何应用大数据感到困惑。 首先&#xff0c;中小企业可以利用大数据来优化营销策略。大数据分…

AidLux+无人机——AI电力巡检新模式

近年来&#xff0c;航空、遥感、以及信息处理等技术迅速发展&#xff0c;使得无人机在电力巡检上逐渐应用开来。 无人机电力巡检作为新型电力巡检方式&#xff0c;不受地形地貌限制、便携易用且高效&#xff0c;能够极大程度降低传统巡检工作的风险和失误&#xff0c;提升工作…

<QT开发> QT开发工具-之-QT应用程序打包

&#xff1c;QT开发&#xff1e; QT开发工具-之-QT应用程序打包 一 前言 笔者为什么会写这篇文章呢&#xff1f;这是因为&#xff0c;笔者使用windows QT开发了一个测试工具。目的是通过TCP/IP测试其它应用程序。首先这个QT程序是笔者自己开发的&#xff0c;所以笔者的电脑当…

如何写出一份还OK的英文简历

大家好&#xff0c;其实对于SAP这个全球超过80%都会用的ERP软件&#xff0c;对于我们顾问而言&#xff0c;永远都有成长空间。 当你技术达到一定水平的时候&#xff0c;你会发现受语言限制更多。 比如国内项目做得差不多了&#xff0c;想尝试国外global项目&#xff1b;或是遇…

关于使用Ajax技术无法获取本地数据的问题

今天在学习Ajax技术时&#xff0c;在按照课程学习的过程中&#xff0c;发现在浏览器中无法获取显示本地文件中的数据。在网上搜索一番后发现&#xff0c;是因为直接在默认浏览器中直接打开HTML文件&#xff0c;而不是通过web服务器访问&#xff0c;会出现跨域请求会受到浏览器的…

C-Free 的最佳替代品 初学者的C/C++ IDE利器 小熊猫C++

IDE选择之困 对于一个C/C的初学者来说&#xff0c;一个好用的IDE会让你快速入门、爱上编程&#xff1b;相反&#xff0c;一个难用的IDE则会让人还没入门就放弃。不要跟我说vimmake&#xff0c;初学者哪里懂这个&#xff0c;windows都不一定玩的溜&#xff0c;玩linux会让人更…

《水经注地图服务》发布的影像数据在水经微图中调用

古人云&#xff1a;“工欲善其事&#xff0c;必先利其器。”意思是说&#xff1a;工匠想要使他的工作做好&#xff0c;一定要先让工具锋利&#xff0c;比如要做好一件事&#xff0c;准备工作非常重要。 语出《论语卫灵公》&#xff1a;子贡问为仁。子曰&#xff1a;“工欲善其…

【AJAX】使用JQ发送AJAX发送请求

首先要引入JQ <script crossorigin"anonymous" src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>服务端代码 // 服务端准备 // 1、引入express const express require(express); // 2、创建应用对象 const app expr…

SpringBoot+JWT实现单点登录解决方案

一、什么是单点登录? 单点登录是一种统一认证和授权机制&#xff0c;指在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的系统&#xff0c;不需要重新登录验证。 单点登录一般用于互相授信的系统&#xff0c;实现单一位置登录&#xff0c;其他信任的…

【nav_msgs/Path.h发布路径】

#include <nav_msgs/Path.h> 是一个 ROS (Robot Operating System) 中的包含文件。它是用于包含 nav_msgs/Path 消息类型的头文件,这是一个标准的 ROS 消息类型。 nav_msgs/Path 消息类型常用于机器人导航系统中,以表示路径。这种路径通常由一系列的位置点组成,这些点…

Spirngboot读取html文件到字符串

一、引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.5</version></dependency> 二、直接读取返回 public String getContent(String path){try {File file ResourceUt…

如何限定IP访问服务器端口(只允许指定IP访问数据库服务器的1433端口)

1、找到“控制面板”->“Windows防火墙”->“高级设置”->“入站规则” 2、选中左侧的"入站规则"&#xff0c;并点击右侧的"新建规则" 3、选择"端口"&#xff0c;点击"下一步" 4、输入要限定访问的端口&#xff0c;这里是要…

瑞吉外卖-Day02

title: 瑞吉外卖-Day02 abbrlink: ‘1’ date: 2023-04-1 19:30:00 瑞吉外卖-Day02 课程内容 完善登录功能新增员工员工信息分页查询启用/禁用员工账号编辑员工信息 分析前端页面效果是如何实现的 为什么点击左边 右边会根着变化 [外链图片转存失败,源站可能有防盗链机制…