4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
事件路由_weixin_30736301的博客-CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-24
1. 概述

业务软件设计开发过程中会依赖一些基础组件 事件路由就是常见的基础组件。 本模块结合业务场景 定制了一个基本的事件路由模块。

本文主要介绍了事件路由模块及其使用方法 用于指导用户开发。

2. 架构原理

事件路由模块 提供了一种事件分发的框架。 用户可以自己定义事件以及事件的处理策略。 具体系统框图组成及对外接口关系如图 15-1 所示。

图15-1 事件路由模块系统框图

\"811006-20190628153105729-1448996063.png\"

概括来说 事件路由模块主要由以下部分构成

订阅者

用户自定义订阅者 订阅者名称 事件处理函数 用户扩展参数 事件是否同步处理。

事件定义

用户自定义事件 事件 ID 参数 1 参数 2 处理结果 创建时间 负载。

事件发布

支持事件统一发布。

事件处理者

订阅者支持异步处理事件 内部启动线程独立处理。

历史事件

支持上一次事件的查询。

3. API 参考

该功能模块为用户提供以下 API

HI_EVTHUB_Init 初始化事件路由模块。HI_EVTHUB_Deinit 去初始化事件路由模块。HI_EVTHUB_Register 注册事件。HI_EVTHUB_UnRegister 解注册事件。HI_EVTHUB_Publish 发布事件。HI_EVTHUB_CreateSubscriber 创建订阅者。HI_EVTHUB_DestroySubscriber 销毁订阅者。HI_EVTHUB_Subscribe 订阅事件。HI_EVTHUB_UnSubscribe 解订阅事件。HI_EVTHUB_GetEventHistory 获取历史事件。HI_EVTHUB_SetEnabled 设置使能标记。HI_EVTHUB_GetEnabled 获取使能标记。 HI_EVTHUB_Init

【描述】

初始化事件路由模块。

【定义】

HI_S32 HI_EVTHUB_Init();

【参数】

无。

【返回值】

返回值描述0成功。非 0失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

该模块是单实例 仅需一次初始化。

【举例】

无。

HI_EVTHUB_Deinit

【描述】

去初始化事件路由模块。

【定义】

HI_S32 HI_EVTHUB_Deinit();

【参数】

无。

【返回值】

返回值描述0成功。非 0失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_Register

【描述】

注册事件。

【定义】

HI_S32 HI_EVTHUB_Register(HI_EVENT_ID EventID);

【参数】
参数名称 | 描述 | 输入/输出
--- | ---| ---
EventID| 事件 ID。| 输入

【返回值】
返回值| 描述
---| ---
0 | 成功。
非 0 | 失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_UnRegister

【描述】

解注册事件。

【定义】

HI_S32 HI_EVTHUB_UnRegister(HI_EVENT_ID EventID);

【参数】

参数名称描述输入/输出EventID事件 ID。输入

【返回值】
返回值 | 描述
---|---
0 | 成功。
非 0 | 失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_Publish

【描述】

发布事件。

【定义】

HI_S32 HI_EVTHUB_Publish(HI_EVENT_S *pEvent);

【参数】

参数名称描述输入/输出pEvent事件指针。输入

【返回值】

返回值描述0成功。非 0失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_CreateSubscriber

【描述】

创建订阅者。

【定义】

HI_S32 HI_EVTHUB_CreateSubscriber(HI_SUBSCRIBER_S pstSubscriber,HI_MW_PTR ppSubscriber);

【参数】

参数名称描述输入/输出pstSubscriber订阅者参数。输入ppSubscriber订阅者句柄指针。输出

【返回值】
返回值 | 描述
---|---
0 | 成功。
非 0 | 失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_DestroySubscriber

【描述】

销毁订阅者。

【定义】

HI_S32 HI_EVTHUB_DestroySubscriber(HI_MW_PTR pSubscriber);

【参数】
参数名称| 描述| 输入/输出
---|---|---
pSubscriber| 订阅者句柄。| 输入

【返回值】

返回值描述0成功。非 0失败 参见错误码。 HI_EVTHUB_Subscribe

【描述】

订阅事件。

【定义】

HI_S32 HI_EVTHUB_Subscribe(HI_MW_PTR pSubscriber,HI_EVENT_ID EventID);

【参数】

参数名称描述输入/输出pSubscriber订阅者句柄。输入EventID事件 ID。输入

【返回值】

返回值描述0成功。非 0失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_UnSubscribe

【描述】

解订阅事件。

【定义】

HI_S32 HI_EVTHUB_UnSubscribe(HI_MW_PTR pSubscriber,HI_EVENT_ID EventID);

【参数】

参数名称描述输入/输出pSubscriber订阅者句柄。输入EventID事件 ID。输入

【返回值】
返回值| 描述
---|---
0 | 成功。
非 0 | 失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_GetEventHistory

【描述】

获取历史事件。

【定义】

HI_S32 HI_EVTHUB_GetEventHistory(HI_S32 EventID,HI_EVENT_S *pEvent);

【参数】

参数名称描述输入/输出EventID事件 ID。输入pEvent事件指针。输出

【返回值】

返回值描述0成功。非 0失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_SetEnabled

【描述】

设置使能标记。

【定义】

HI_S32 HI_EVTHUB_SetEnabled(HI_BOOL bFlag);

【参数】
参数名称 | 描述| 输入/输出
---|---|---
bFlag | 使能标记。| 输入

【返回值】

返回值描述0成功。非 0失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

HI_EVTHUB_GetEnabled

【描述】

获取使能标记。

【定义】

HI_S32 HI_EVTHUB_GetEnabled(HI_BOOL *pFlag);

【参数】
参数名称| 描述| 输入/输出
---| ---|---
pFlag | 使能标记指针。| 输出

【返回值】
返回值 | 描述
---|---
0 | 成功。
非 0 | 失败 参见错误码。

【需求】

头文件 hi_eventhub.h库文件 libeventhub.a/ libeventhub.so

【注意】

无。

【举例】

无。

4. 数据类型

事件路由模块相关数据类型定义如下

EVENT_PAYLOAD_LEN 事件负载数据最大长度。HI_EVTHUB_SUBSCRIBE_NAME_LEN 订阅者名称最大长度。HI_EVTHUB_MESSAGEQURUR_MAX_SIZE 消息队列最大值。HI_EVENT_ID 事件 ID。HI_EVENT_S 事件结构体。HI_SUBSCRIBER_S 订阅者结构体。 EVENT_PAYLOAD_LEN

【说明】

事件负载数据最大长度。

【定义】

#define EVENT_PAYLOAD_LEN (512)

【注意事项】

无。

【相关数据结构及接口】

无。

HI_EVTHUB_SUBSCRIBE_NAME_LEN

【说明】

订阅者名称的最大长度。

【定义】

#define HI_EVTHUB_SUBSCRIBE_NAME_LEN (16)

【注意事项】

无。

【相关数据类型及接口】

HI_EVTHUB_SUBSCRIBE_NAME_LEN

【说明】

订阅者名称的最大长度。

【定义】

#define HI_EVTHUB_SUBSCRIBE_NAME_LEN (16)

【注意事项】

无。

【相关数据类型及接口】

HI_EVTHUB_MESSAGEQURUR_MAX_SIZE

【说明】

消息队列最大值。

【定义】

#define HI_EVTHUB_MESSAGEQURUR_MAX_SIZE (32)

【注意事项】

无。

【相关数据类型及接口】

无。

HI_EVTHUB_MESSAGEQURUR_MAX_SIZE

【说明】

消息队列最大值。

【定义】

#define HI_EVTHUB_MESSAGEQURUR_MAX_SIZE (32)

【注意事项】

无。

【相关数据类型及接口】

无。

HI_EVENT_S

【说明】

定义事件结构体。

【定义】

typedef struct hiEVENT_S{ HI_EVENT_ID EventID; HI_S32 arg1; HI_S32 arg2; HI_S32 s32Result; HI_U64 u64CreateTime; HI_CHAR aszPayload[EVENT_PAYLOAD_LEN];} HI_EVENT_S;

【成员】

成员名称描述EventID事件 IDarg1参数一arg2参数二s32Result处理结果u64CreateTime创建时间aszPayload负载数据

【注意事项】

创建时间在事件发布时 由模块内部获取系统 clock 时间填充 单位秒/s。

【相关数据类型及接口】

HI_SUBSCRIBER_S

【说明】

定义订阅者结构体。

【定义】

typedef struct hiSUBSCRIBER_S{ HI_CHAR azName[HI_EVTHUB_SUBSCRIBE_NAME_LEN]; HI_S32 (*HI_EVTHUB_EVENTPROC_FN_PTR)(HI_EVENT_S* pEvent, HI_VOID* argv); HI_VOID* argv; HI_BOOL bSync;}HI_SUBSCRIBER_S;

【成员】
成员名称 | 描述
---|---
azName| 订阅者名称。
HI_EVTHUB_EVENTPROC_FN_PTR| 订阅者事件处理函数。
argv| 用户定义私有参数指针。
bSync| 事件处理是否同步。

【注意事项】

无。

【相关数据类型及接口】

无。

5 错误码

事件路由模块 API 错误码如表 15-1 所示。

表15-1 事件路由 API 错误码

错误代码宏定义描述0xA1328002HI_ERR_EVTHUB_NULL_PTR空指针错误0xA1328008HI_ERR_EVTHUB_NOT_INIT未初始化错误0xA1328040HI_ERR_EVTHUB_HANDLE_INVALID非法句柄错误。0xA1328041HI_ERR_EVTHUB_INVALIDARG非法参数0xA1328042HI_ERR_EVTHUB_MALLOC内存申请错误0xA1328043HI_ERR_EVTHUB_CREATE创建错误0xA1328044HI_ERR_EVTHUB_DESTROY销毁错误0xA1328045HI_ERR_EVTHUB_NOT_CREATE对象没有创建0xA1328046HI_ERR_EVTHUB_EVENT_NO_RIGEST事件未注册0xA1328047HI_ERR_EVTHUB_NO_EVENT_HISTORY历史事件不存在0xA1328048HI_ERR_EVTHUB_MSGHDL_SEND事件路由消息发送错误

转载于:https://www.cnblogs.com/linhaostudy/p/11103974.html

\"\" \"\" \"\" 点赞 \"\" \"\" 评论

本文链接: http://rigest.immuno-online.com/view-676476.html

发布于 : 2021-03-24 阅读(0)