7.26. SERVER
Overview
提供server接口应用示例和常见问题。
7.26.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.26.2. 常见问题
- 为什么要使用server - 答:用户新增一个功能库, 外部直接调用功能接口有可能存在互斥的问题,引入server是为了解决这个问题,应用程序无需关心使用互斥问题,server任务统一了事件的操作,并且提供一种框架给用户使用.用户也可以通过熟悉此例子来了解其他server库的使用 
7.26.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:失败