7.25. SERVER
Overview
提供server接口应用示例和常见问题。
7.25.1. 应用示例
示例演示:
如何创建使用server;
server事件event响应流程;
example: 进入 apps/demo/demo_DevKitBoard/include/demo_config.h
,开启宏 USE_SERVER_TEST_DEMO
。
Note
main.c
- c_main()入口:
1.创建server_example_task任务
server_example_task
A.打开服务
B.注册服务事件通知回调
C.同步和异步请求服务做事情
D.清除服务队列还没执行的 server_event_handler 事件通知
E.关闭服务,释放资源
test_server.c
SERVER_REGISTER:创建server
test_server_open:创建一个与 SERVER_REGISTER name 同名的任务
test_server_task
A)响应层应用请求事件
B ) 事件通知上层应用
test_server_close
A)删除test_server任务
7.25.2. 常见问题
为什么要使用server
答:用户新增一个功能库, 外部直接调用功能接口有可能存在互斥的问题,引入server是为了解决这个问题,应用程序无需关心使用互斥问题,server任务统一了事件的操作,并且提供一种框架给用户使用.用户也可以通过熟悉此例子来了解其他server库的使用
7.25.3. API Reference
Functions
-
struct server *server_open(const char *name, void *arg)
打开服务
- Parameters
name – 服务名称
arg – 服务的私有参数
- Returns
server: 创建成功返回服务句柄 NULL:打开失败
-
void server_register_event_handler(struct server *server, void *priv, void (*handler)(void*, int argc, int *argv))
注册服务事件回调
Note
执行该函数的当前任务必须带有队列消息,并且需要接收队列消息才能执行事件回调
- Parameters
server – server_open返回的服务句柄
priv – 服务事件回调的私有指针
handler – 服务事件回调函数
-
void server_register_event_handler_to_task(struct server *server, void *priv, void (*handler)(void*, int argc, int *argv), const char *task_name)
注册服务事件回调,并指定执行服务事件回调函数的任务
Note
指定的任务必须带有队列消息,并且需要接收队列消息才能执行事件回调
- Parameters
server – server_open返回的服务句柄
priv – 服务事件回调的私有指针
handler – 服务事件回调函数
task_name – 指定执行服务事件回调函数的任务名称
-
int server_request(struct server *server, int req_type, void *arg)
同步请求服务,待服务请求成功才退出函数
- Parameters
server – server_open返回的服务句柄
req_type – 服务请求的类型
arg – 对应服务请求的参数
- Returns
0:请求成功 非0:请求失败
-
int server_request_async(struct server *server, int req_type, void *arg, ...)
异步请求服务,该函数退出并不代表服务已经请求成功
- Parameters
server – server_open返回的服务句柄
req_type – 服务请求的类型
arg – 对应服务请求的参数
- Returns
0:请求成功 非0:请求失败
-
int server_req_complete(struct server_req *req)
服务请求响应完成
- Parameters
req – 服务请求信息
- Returns
0:成功 非0:失败
-
int server_event_handler(void *server, int argc, int *argv)
服务有事件通知上层应用处理
- Parameters
server – server_open返回的服务句柄
argc – 事件的参数个数
argv – 事件参数数组
- Returns
0:成功 非0:失败
-
int server_event_handler_del(void *_server, int argc, int *argv)
清除任务消息回调还没执行的通过server_event_handler的事件通知, 参数必须与server_event_handler指定事件相同
- Parameters
server – server_open返回的服务句柄
argc – 通知时对应的事件的参数个数
argv – 通知时对应的事件参数数组
- Returns
0:成功 非0:失败