业务软件设计开发过程中会依赖一些基础组件 事件路由就是常见的基础组件。 本模块结合业务场景 定制了一个基本的事件路由模块。
本文主要介绍了事件路由模块及其使用方法 用于指导用户开发。
2. 架构原理事件路由模块 提供了一种事件分发的框架。 用户可以自己定义事件以及事件的处理策略。 具体系统框图组成及对外接口关系如图 15-1 所示。
图15-1 事件路由模块系统框图
概括来说 事件路由模块主要由以下部分构成
订阅者用户自定义订阅者 订阅者名称 事件处理函数 用户扩展参数 事件是否同步处理。
事件定义用户自定义事件 事件 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