查看: 6|回复: 0

HSEP 进阶指南:解锁异步请求-响应交互模式

[复制链接]

10

主题

0

回帖

46

积分

版主

积分
46
发表于 昨天 13:50 |天津| 显示全部楼层 |阅读模式
这个功能让你的 HSEP 插件不再只是被动地处理数据,而是能够主动响应外部指令,实现灵活的“请求-响应”交互。这就像为你的插件增加了一个可以随时接收并处理命令的“服务窗口”。
什么是请求队列?
简单来说,请求队列是一种通信机制。它允许外部工具(如 UDMM)向你的插件发送一个特定的“请求”,你的插件在接收到请求后,会立即执行你预先写好的处理逻辑(即“回调函数”)。
整个流程如下:
  • 插件端:在插件中注册一个或多个请求队列及对应的处理函数。
  • 用户端:使用 UDMM 连接到 HSEP,找到你注册的队列,并发送一个请求。
  • HSEP:接收到请求后,自动调用插件中对应的回调函数来处理它。
如何使用:在 publishOutputs 中注册
与之前的理解不同,注册请求队列和请求处理器的核心步骤,都需要在 publishOutputs() 函数中完成。这是 HSEP 框架的设计要求,确保了在数据发布阶段就准备好接收指令的通道。
第一步:注册队列 (registerQueue)
首先,你需要创建一个“队列”来存放请求。HSEP 支持两种队列:
  • 注册默认队列
    每个 topic 可以有一个默认队列。
    1. // 在 publishOutputs() 函数中
    2. TIF::Osal::Bool Example1::publishOutputs() {
    3.     // 注册一个 topic 为 "MyTopic" 的默认队列
    4.     registerQueue("MyTopic");
    5.     return true;
    6. }
    复制代码
    注册自定义队列
    你也可以在同一个 topic 下创建多个不同名称的自定义队列。
    1. // 在 publishOutputs() 函数中
    2. TIF::Osal::Bool Example1::publishOutputs() {
    3.     // 注册一个 topic 为 "MyTopic",队列名为 "MySpecialQueue" 的自定义队列
    4.     registerQueue("MyTopic", "MySpecialQueue");
    5.     return true;
    6. }
    复制代码
    第二步:注册请求处理器 (registerQueueHandler)
    队列建好后,你需要告诉 HSEP,当收到特定请求时,应该执行哪个函数。这一步同样在 publishOutputs() 中完成。
    • 为默认队列注册请求
      1. // 在 publishOutputs() 函数中
      2. TIF::Osal::Bool Example1::publishOutputs() {
      3.     // 1. 先注册队列
      4.     registerQueue("MyTopic");
      5.    
      6.     // 2. 再注册请求处理器
      7.     // 向 "MyTopic" 的默认队列注册一个名为 "DoSomething" 的请求
      8.     // 当收到此请求时,将调用本类的 handleDoSomething 函数
      9.     registerQueueHandler("MyTopic", "DoSomething", (RequestHandler)&Example1::handleDoSomething);
      10.    
      11.     return true;
      12. }
      复制代码

      为自定义队列注册请求
      1. // 在 publishOutputs() 函数中
      2. TIF::Osal::Bool Example1::publishOutputs() {
      3.     // 1. 先注册队列
      4.     registerQueue("MyTopic", "MySpecialQueue");
      5.    
      6.     // 2. 再注册请求处理器
      7.     // 向 "MyTopic" 下的 "MySpecialQueue" 队列注册一个名为 "DoSomethingElse" 的请求
      8.     // 当收到此请求时,将调用本类的 handleDoSomethingElse 函数
      9.     registerQueueHandler("MyTopic", "MySpecialQueue", "DoSomethingElse", (RequestHandler)&Example1::handleDoSomethingElse);
      10.    
      11.     return true;
      12. }
      复制代码
      编写回调函数
      最后,你需要在 .h 文件中声明并在 .cpp 文件中实现上面注册的回调函数。这个函数就是你的业务逻辑所在地。
      完成以上步骤后,当你使用 UDMM 连接到 HSEP,就能在指定的 topic 下看到你注册的队列。向队列发送对应名称的请求,你的插件就会立刻执行相应的回调函数,实现强大的交互式控制。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:business@nimbusaether.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部