REDHAWK——连接(续)(三)

简介: REDHAWK——连接(续)(三)

REDHAWK——连接(续)(二)https://developer.aliyun.com/article/1474068

3、查看消息

消息是事件,其有效负载定义与组件属性中的结构相关联。查看消息可以使用用于查看事件的相同技术。

要在终端窗口查看发送到事件通道的事件和消息:

eventviewer <domain name> <event channel>

实用程序的帮助:

eventviewer --help

eventviewer REDHAWK_DEV testchan

示例输出:

这里出现了错误,还未找到解决办法,待后续找到后修改

4、连接生产者和消费者

生产者和消费者可以点对点连接,也可以通过IDE 中的事件通道连接。将生产者直接连接到消费者不需要应用程序,并且可以在沙箱中完成:

from ossie.utils import sb
sb.catalog()
#['structs_test', 'm_in', 'prop_changes', 'm_out','pass']
prod=sb.launch("m_out")
cons=sb.launch("m_in")
prod.connect(cons)
#True
sb.start()

这里出现了错误,还未找到解决办法,待后续找到后修改

5、连接回调

在组件中,许多 REDHAWK 中的 Uses 端口类支持在连接建立或断开时进行通知。支持的端口类型和语法因语言而异。

①、C++

在 C++ 中,Bulk 输入/输出(BulkIO)、Burst 输入/输出(BurstIO)和消息 Uses 端口的连接通知机制已标准化。连接和断开回调被注册在端口上。

以下示例假设一个 C++ 组件具有 BulkIO 浮点输出端口,dataFloat_out;然而,对于 BurstIO 和消息端口,语法是相同的。

在组件头文件中,将回调声明为私有成员函数。连接和断开回调都接收单一参数,连接 ID(一个引用的 std::string):

void dataFloatConnected(const std::string& connectionId);
void dataFloatDisconnected(const std::string& connectionId);

在组件源文件中,实现回调函数:

void MyComponent_i::dataFloatConnected(const std::string& connectionId)
{
  LOG_INFO(MyComponent_i, "New connection " << connectionId << " on dataFloat_out");
}
void MyComponent_i::dataFloatDisconnected(const std::string& connectionId)
{
  LOG_INFO(MyComponent_i, "Disconnected " << connectionId << " on dataFloat_out");
}

然后,在组件 constructor() 中注册回调函数

dataFloat_out->addConnectListener(this, &MyComponent_i::dataFloatConnected);
dataFloat_out->addDisconnectListener(this, &MyComponent_i::dataFloatDisconnected);

addConnect Listener()addDisconnectListener() 接受两个参数:目标对象(通常是this)和一个指向成员函数的指针。

没有必要同时注册连接和断开回调。

6、自定义 IDL 接口

REDHAWK提供前端接口(FEI)和标准核心框架(CF)接口(如 CF::Resource),用于控制实体并促进互操作性。在某些用例中,您可能会发现需要使用自定义接口描述语言(IDL)来控制实体。对于这些用例,您可以在 IDE 中创建自定义 IDL 项目。

将端口从 FEI 接口或自定义 IDL 接口添加到组件或设备中,允许该实体通过 CORBA 控制其他实体。由于这些端口的通用性质,不可能创建像 BulkIO 这样的语言映射,因此交互是通过标准的 CORBA API 进行的,其完整描述超出了本手册的范围。然而,REDHAWK 代码生成器将生成简化与端口交互的端口。以下部分解释了使用(输出)端口的情况,因为它们最有可能被生成,例如,用于控制 FEI 设备。

①、连接反馈

在所有三种支持的语言中,FEI、标准 CF 或自定义 IDL 端口将有所有方法和属性映射到端口,并且端口将委托调用给远程连接。在 REDHAWK 中,端口可能没有连接、有一个连接或多个连接。这些条件中的每一个都可能为使用端口进行通信的人创建问题;例如,如果发送了一个控制请求并且没有连接,那么用户应该被告知请求没有发送到任何地方。

同时,并非所有方法都是相同的。一些方法只在一个方向上推送数据,一些方法有返回值,一些方法有作为指针的参数,需要用信息填充(输出或输入/输出参数)。当调用端口方法并且端口无法进行调用或调用无法明确时(例如,如果存在两个连接并且函数包含返回值),则在用户代码中引发 PortCallError。下表描述了满足的方法签名标准及其对应的行为。

如果一个方法作为其非异常 API 的一部分有任何形式的返回值(表现为非 void 返回值,或一个输出或输入/输出参数),那么如果端口有多于一个的连接,就会引发一个异常。此外,如果尝试调用时实际上没有连接,就会引发一个错误。

②、连接选择

虽然当所需的连接不明确时,生成的端口类会触发一个错误,但它也包含一个 API,允许开发者选择应该使用哪个连接。每个方法都有一个可选参数,connection_id,允许调用者明确应该使用哪个连接。默认值行为将使用最后建立的连接。如果指定的 connection_id 不存在,将引发 PortCallError。

在以下部分中,用于明确连接的相同模式在所有三种支持的语言中都提供了。

以下代码示例使用调用 CF::File 接口的 read 方法时的默认行为。

CF::OctetSequence_var _data = new CF::OctetSequence();
 CF::OctetSequence_out data(_data);
 this->file_out->read(data, 10); // read 10 characters from the last connection made to the port

以下代码示例将读取调用明确指向一个特定的连接,connection1。

CF::OctetSequence_var _data = new CF::OctetSequence();
 CF::OctetSequence_out data(_data);
 this->file_out->read(data, 10, "connection1"); // read 10 characters from the connection called "connection1"

要查看可用的连接,请使用以下代码:

std::vector<std::string> _connection_ids = this->file_out->getConnectionIds();

③、方法映射

方法名称映射遵循在连接选择中描述的模式;即方法名称与 IDL 中描述的名称相同,但增加了一个额外的参数(可选地使用),可以指定应使用哪个连接。属性被映射为对 CORBA 对象的函数。REDHAWK 提供额外的 API 来消除对多个连接的调用的歧义。

④、读取属性

通过调用属性的名称作为函数来执行读取属性。例如,如果端口 my_port 包含字符串属性 greeting,则可以如下检索 greeting 的值:

std::string _greeting = this->my_port->greeting();

要从特定连接检索值,需要_get_前缀:

std::string _greeting = this->my_port->_get_greeting("some_connection_name");

⑤、写入属性

在 C++ 中写入属性涉及使用适当的参数调用函数:

this->my_port->greeting("hello"); // write "hello" to the attribute "greeting"
 this->my_port->greeting("hello", "some_connection_name"); // write "hello" to the attribute "greeting" over connection "some_connection_name"
目录
相关文章
|
Python
Python分支结构双分支讲解
Python分支结构双分支讲解
436 0
|
网络协议 网络架构
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
|
存储 弹性计算 NoSQL
libcuckoo论文概述
本文简要阐述libcuckoo项目的两篇论文基础。如有错漏之处,欢迎指出一起讨论交流。 ## 论文1 《MemC3: Compact and Concurrent MemCache with Dumber Caching and Smarter Hashing》 这篇论文主要讲了在多线程模式下如何提升cuckoo hash table的吞吐。 ### 问题 传统hash表在并发效率上并不
2009 0
libcuckoo论文概述
|
10月前
|
人工智能 自然语言处理 物联网
LLM2CLIP:使用大语言模型提升CLIP的文本处理,提高长文本理解和跨语言能力
LLM2CLIP 为多模态学习提供了一种新的范式,通过整合 LLM 的强大功能来增强 CLIP 模型。
435 3
LLM2CLIP:使用大语言模型提升CLIP的文本处理,提高长文本理解和跨语言能力
|
12月前
|
编解码 Kubernetes 容器
有奖评测!容器服务 Kubernetes 版 ACK 文档体验评测等你来
诚邀容器服务 Kubernetes 版 ACK 用户参与文档体验评测!2024年8月14日至9月25日,完成15个场景任务并提供真实评分、改进建议及体验视频,即可获300元现金奖励;最佳建议另有100元奖金。任务需对比多云文档并按指引录制视频。详情请见活动页面与钉群通知。名额有限,速来参加!
|
关系型数据库 MySQL 大数据
DataX:数据同步的超音速英雄!阿里开源工具带你飞越数据传输的银河系,告别等待和故障的恐惧!快来见证这一数据工程的奇迹!
【8月更文挑战第13天】DataX是由阿里巴巴开源的一款专为大规模数据同步设计的工具,在数据工程领域展现强大竞争力。它采用插件化架构,支持多种数据源间的高效迁移。相较于Apache Sqoop和Flume,DataX通过并发写入和流处理实现了高性能同步,并简化了配置流程。DataX还支持故障恢复,能够在同步中断后继续执行,节省时间和资源。这些特性使其成为构建高效可靠数据同步方案的理想选择。
780 2
|
10月前
|
存储 缓存 固态存储
阿里云服务器2核8G、4核16G、8核32G配置租用收费标准与活动价格参考
2核8G、8核32G、4核16G配置的云服务器处理器与内存比为1:4,这种配比的云服务器一般适用于中小型数据库系统、缓存、搜索集群和企业办公类应用等通用型场景,因此,多为企业级用户选择。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
算法 Shell C语言
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
239 0
|
IDE 算法 中间件
初识REDHAWK
初识REDHAWK
494 2
|
缓存 Java 编译器
【Java异常】Error:(19, 21) java: 无法访问org.apache.poi.xwpf.usermodel.ParagraphAlignment 找不到org.apache.po
【Java异常】Error:(19, 21) java: 无法访问org.apache.poi.xwpf.usermodel.ParagraphAlignment 找不到org.apache.po
587 0