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任务

    1. server_example_task

      A.打开服务

      B.注册服务事件通知回调

      C.同步和异步请求服务做事情

      D.清除服务队列还没执行的 server_event_handler 事件通知

      E.关闭服务,释放资源

test_server.c

    1. SERVER_REGISTER:创建server

    1. test_server_open:创建一个与 SERVER_REGISTER name 同名的任务

    1. test_server_task

    A)响应层应用请求事件

    B ) 事件通知上层应用

    1. 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 – 指定执行服务事件回调函数的任务名称

void server_close(struct server *server)

关闭服务

Parameters

server – server_open返回的服务句柄

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:失败