1. 概述 業務軟體設計開發過程中會依賴一些基礎組件, 事件路由就是常見的基礎組件。 本模塊結合業務場景, 定製了一個基本的事件路由模塊。 本文主要介紹了事件路由模塊及其使用方法, 用於指導用戶開發。 2. 架構原理 事件路由模塊, 提供了一種事件分發的框架。 用戶可以自己定義事件以及事件的處理策略 ...
1. 概述
業務軟體設計開發過程中會依賴一些基礎組件, 事件路由就是常見的基礎組件。 本模塊結合業務場景, 定製了一個基本的事件路由模塊。
本文主要介紹了事件路由模塊及其使用方法, 用於指導用戶開發。
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 | 事件 ID |
arg1 | 參數一 |
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 錯誤碼
錯誤代碼 | 巨集定義 | 描述 |
---|---|---|
0xA1328002 | HI_ERR_EVTHUB_NULL_PTR | 空指針錯誤 |
0xA1328008 | HI_ERR_EVTHUB_NOT_INIT | 未初始化錯誤 |
0xA1328040 | HI_ERR_EVTHUB_HANDLE_INVALID | 非法句柄錯誤。 |
0xA1328041 | HI_ERR_EVTHUB_INVALIDARG | 非法參數 |
0xA1328042 | HI_ERR_EVTHUB_MALLOC | 記憶體申請錯誤 |
0xA1328043 | HI_ERR_EVTHUB_CREATE | 創建錯誤 |
0xA1328044 | HI_ERR_EVTHUB_DESTROY | 銷毀錯誤 |
0xA1328045 | HI_ERR_EVTHUB_NOT_CREATE | 對象沒有創建 |
0xA1328046 | HI_ERR_EVTHUB_EVENT_NO_RIGEST | 事件未註冊 |
0xA1328047 | HI_ERR_EVTHUB_NO_EVENT_HISTORY | 歷史事件不存在 |
0xA1328048 | HI_ERR_EVTHUB_MSGHDL_SEND | 事件路由消息發送錯誤 |