欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实现一个简易的对等式异步通信框架

程序员文章站 2022-07-13 21:12:59
...

前面实现了一个简单的内存数据库,接下来就基于这个简单的内存数据库实现一个异步回调的通信框架。

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

相关标签: 软件框架