REDHAWK——连接(续)(二)

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

REDHAWK——连接(续)(一)https://developer.aliyun.com/article/1474060

  • 5)在“所有属性(All Properties)”部分,选择您添加的结构属性。默认情况下,已经存在一个简单成员。您可以修改它并为结构属性创建额外的成员。有关属性结构、类型和种类的更多信息,请参考管理和定义属性。修改和/或创建这些成员后,结构的成员和相应的属性信息将被显示。

  • 6)选择“端口(Ports)”标签,点击“添加(Add)”,并在“名称(Name)”字段中输入名称。在“端口详情(Port Details)”部分,在“方向(Direction)”下拉菜单中选择“出(out )”。在“接口(Interface)”字段旁,点击“浏览(Browse)”。将显示“选择接口(Select an Interface)”对话框。从显示的接口列表中,选择“ExtendedEvent> MessageEvent”并点击“确定(OK)”。此时将显示消息生产者端口的信息。

  • 7)重新生成组件。创建消息生产者后,您可以从消息生产者端口发送消息。

②、发送消息

以下代码示例演示了如何在 C++中从组件的消息输出端口向事件通道或另一个组件的消息输入端口发送外发消息。

出于以下示例的目的,假设结构如下:

  • id: foo
  • 包含两个成员:
  • name: some_string, type: string
  • name: some_float, type: float
  • 组件的 uses 端口称为 message_out
  • 组件的名称是 message_producer



在每个示例中,通过声明该类型的变量来创建消息。然后,设置其状态,并使用消息端口的 sendMessage() 方法发送消息,消息变量作为参数。

C++:

要生成消息,可以在实现文件的 serviceFunction() 方法中添加以下代码。

foo_struct my_msg;
my_msg.some_string = "hello";
my_msg.some_float = 1.0;
this->message_out->sendMessage(my_msg);
// Send a message to a specific connection by providing a `connectionId` parameter.
// If `connectionId` does not match any connection, an `std::illegal_argument` exception is thrown.
this->message_out->sendMessage(my_msg, "connection_1");

2、消息消费者

在创建新组件或编辑现有组件时,可以创建消息消费者。创建消息消费者后,您必须注册您的代码以从端口接收消息。以下程序解释了如何创建消息消费者并注册代码以处理消息。

①、创建消息消费者

流程同上消息生产者流程,与创建消息消费者流程不同之处只是在端口详细信息部分的方向下拉列表中,选择bi-dir

②、注册接收消息

以下示例解释了如何在 C++中注册代码以处理传入消息。

出于以下示例的目的,假设结构如下:

  • id: foo
  • 包含两个成员:
  • name: some_string, type: string
  • name: some_float, type: float
  • 组件的 uses/provides 端口称为 message_in
  • 组件的此消息的回调函数为 messageReceived()
  • 组件的名称是 message_consumer

如果此组件与消息生产者或事件通道之间存在连接,则以下代码示例将处理传入消息。

任何带有属性 ID foo 的消息都将触发回调函数 messageReceived()。

C++ :

鉴于事件的异步性质,为消费者选择了回调模式。在组件头文件中,声明以下回调函数:

void messageReceived(const std::string &id, const foo_struct &msg);

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

void message_consumer_i::messageReceived(const std::string &id, const foo_struct &msg) {
  LOG_INFO(message_consumer_i, id<<" "<<msg.some_float<<" "<<msg.some_string);
}

在构造器(constructor())方法中,注册回调函数:

message_in->registerMessage("foo", this, &message_consumer_i::messageReceived);


REDHAWK——连接(续)(三)https://developer.aliyun.com/article/1474069

目录
相关文章
|
关系型数据库 MySQL PHP
分享151个PHP源码,总有一款适合您
分享151个PHP源码,总有一款适合您
769 0
|
缓存 安全 关系型数据库
PolarDB 阿里云国产化数据库:linux系统下的详细安装步骤手册
PolarDB 阿里云国产化数据库:linux系统下的详细安装步骤手册
5639 0
PolarDB 阿里云国产化数据库:linux系统下的详细安装步骤手册
|
安全 Linux Shell
全面对比linux和windows,选择哪个系统比较好
全面对比linux和windows,选择哪个系统比较好
2269 0
|
人工智能 JavaScript 前端开发
【前端|JS实战第1篇】使用JS来实现属于自己的贪吃蛇游戏!
【前端|JS实战第1篇】使用JS来实现属于自己的贪吃蛇游戏!
401 0
|
缓存 计算机视觉 数据格式
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决)
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决
|
11月前
|
人工智能 文字识别 监控
卷死传统系统!AIOA 协同办公,傻瓜式玩转智能管理
AIOA协同管理平台基于钉钉和钉钉低代码构建,以预置OA应用快速迭代满足业务需求。方案内置销售、采购、财务费用闭环等主线应用,并提供固定资产、车辆管理、证照管理、访客管理等高频场景,实现开箱即用,快速响应企业信息化需求。通过统一门户、互联互通的流程体系、丰富的办公管理应用以及智能化能力,提升企业内外协同效率,支持持续数字化转型。
729 12
卷死传统系统!AIOA 协同办公,傻瓜式玩转智能管理
|
Web App开发 数据可视化
如何轮播 DataV 大屏
如何轮播 DataV 大屏 当你使用 DataV 制作了足够多的大屏时,一定会冒出一个需求:轮流播放大屏页面,不要怕,一分钟就可以搞定 安装 Chrome 插件 TabCarousel 首先安装神器插件 TabCarousel 使用 安装完成之后,地址栏右侧会出现这么个小图标 。
19562 154
如何轮播 DataV 大屏
|
缓存 JavaScript 前端开发
Vue.js有什么特点
Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它由尤雨溪(Evan You)在 2014 年创建,并迅速获得了广泛的关注和采用。
323 0
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
【7月更文挑战第18天】Python并发编程中,异步IO适合IO密集型任务,如异步HTTP请求,利用`asyncio`和`aiohttp`实现并发抓取,避免等待延迟。而对于CPU密集型任务,如并行计算斐波那契数列,多进程通过`multiprocessing`库能绕过GIL限制实现并行计算。选择正确的并发模型能显著提升性能。
286 2
|
XML IDE JavaScript
REDHAWK——波形(一)
REDHAWK——波形
258 0