前面實現了一個簡單的內存數據庫,接下來就基於這個簡單的內存數據庫實現一個異步回調的通信框架。
1.接口定義
Zxcom接口主要有:
- 初始化和去初始化。
- 添加命令和應答處理函數。
- 包的接收和發送包的組建。
1.1 初始化和去初始化
int ZxcomInit()
int ZxcomDeInit()
1.2 添加命令和響應處理函數
int ZxcomAddCommand(COMMAND_ID_TYPE id,command_handler_t handler)
參數:
COMMAND_ID_TYPE id command_handler_t handler
所響應命令的id 處理函數
本接口由命令響應方調用,用於處理指定id的命令請求。
int ZxcomAddResponse(COMMAND_ID_TYPE id,command_handler_t handler)
參數:
COMMAND_ID_TYPE id command_handler_t handler
所響應命令的id 處理函數
本接口由命令請求方調用,用於處理命令響應方的應答。
1.3包的接收和發送包的組建
int ZxcomOnPacket(const char *pack,const int len)
參數:
const char *pack const int len
收到的包 包長度
用戶收到包後,只需調用本接口即可,無需做其它事情。
int ZxcomOnSendMsg(COMMAND_ID_TYPE cmdId,const char *param,const unsigned int paramLen,char *packet)
參數:
cmdId param paramLen packet
命令ID 命令參數 參數長度 命令包
這個接口輸入命令Id,命令參數,參數長度,返回命令包,用戶只需將得到的packet發送到命令接收方即可。
int ZxcomOnSendResponse(COMMAND_ID_TYPE cmdId,const char *param,const unsigned int paramLen,char *packet)
參數:
cmdId param paramLen packet
命令ID 命令參數 參數長度 命令包
這個接口輸入命令Id,響應參數,參數長度,返回應答包,用戶只需將得到的packet發送到命令發送方即可。
1.4 超時處理功能
超時處理功能需要用戶實現超時處理函數,然後調用接口:
int CommSetEventHandler(EVENT_HANDLER ev)
進行添加。
1.5 需要用戶實現的回調函數
1. 事件(超時)處理函數
函數類型爲:typedef int (*EVENT_HANDLER)(const int event,const int msgId)
2. 互斥鎖
int CRITICAL_INIT();
void ENTER_CRITICAL();
void EXIT_CRITICAL();
int CRITICAL_DEINIT();
在MCU中可以用關中斷和開中斷實現,linux下用線程鎖pthread_mutex_t。
3. 命令(應答)處理函數:
函數類型:typedef int (*command_handler_t)(void *para)。
2.應用實例:
這裏使用unix套接字模擬命令的發送和接收端,簡單示範了本框架的使用。
代碼:
運行服務端:
./main
運行客戶端:
./main c
3. 構建方法:
git clone https://github.com/KevinZu/zxcom.git
cd zxcom
mkdir build
cd build
cmake ..
make
本項目依賴庫:ucomlib