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