實現一個簡易的對等式異步通信框架

前面實現了一個簡單的內存數據庫,接下來就基於這個簡單的內存數據庫實現一個異步回調的通信框架。

zxcom

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.c

運行服務端:

./main

運行客戶端:

./main c

3. 構建方法:

git clone https://github.com/KevinZu/zxcom.git

cd zxcom

mkdir build

cd build

cmake ..

make

本項目依賴庫:ucomlib

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章