doubao_chat/apps/common/example/system/server/main.c

118 lines
3.8 KiB
C

#include "app_config.h"
#include "system/includes.h"
#include "server/server_core.h"
/* #include "../../../apps/common/example/server/test_server.h" */
#include "test_server.h"
#ifdef USE_SERVER_TEST_DEMO
static void test_server_event_handler(void *priv, int argc, int *argv)
{
switch (argv[0]) {
case TEST_SERVER_EVENT:
printf("TEST_SERVER_EVENT[in %s task] run : priv=%s, argc=0x%x, argv[1]=0x%x\n", os_current_task(), priv, argc, argv[1]);
break;
default:
break;
}
}
static int test_server_completed_func(void *priv, int err)
{
printf("test_server_completed_func[in %s task] run : 0x%x, err = 0x%x\n", os_current_task(), priv, err);
return 0;
}
static void server_example_task(void *p)
{
int test_cnt = 1;
int ret;
int msg[32];
int argv[2];
struct test_server_req_parm test_server_req_parm;
//如果 test_server 打包成库, 这句话用于把库链接进来, 不打包成库就不需要
server_load(test_server);
//打开服务
struct server *test_server_hdl = server_open("test_server", "server_open_arg");
if (!test_server_hdl) {
puts("server_test_task server_open faild!!!\n");
}
//注册服务事件通知回调
server_register_event_handler(test_server_hdl, "test_priv", test_server_event_handler);
while (1) {
puts("\r\n\r\n");
//__os_taskq_pend 是为了让 test_server_event_handler 和 test_server_completed_func 能够在里面运行
ret = __os_taskq_pend(msg, ARRAY_SIZE(msg), 200); //200个tick超时返回 OS_Q_EMPTY
if (test_cnt-- == 0) {
break;
}
//同步请求服务做一件事情
test_server_req_parm.cmd = 0xa;
ret = server_request(test_server_hdl, TEST_REQ_DO1, &test_server_req_parm);
if (ret) {
printf("server_request faild = 0x%x!!!\n", ret);
}
test_server_req_parm.cmd = 0xb;
ret = server_request(test_server_hdl, TEST_REQ_DO2, &test_server_req_parm);
if (ret) {
printf("server_request faild = %d!!!\n", ret);
}
printf("server_request TEST_REQ_DO2 test_server_req_parm.cmd = 0x%x \r\n", test_server_req_parm.cmd);
//异步请求服务做一件事情
test_server_req_parm.cmd = 0xc;
ret = server_request_async(test_server_hdl, TEST_REQ_DO1, &test_server_req_parm);
if (ret) {
printf("server_request_async faild = %d!!!\n", ret);
}
//异步请求服务做一件事情, 并且完成后调用回调
test_server_req_parm.cmd = 0xd;
ret = server_request_async(test_server_hdl, TEST_REQ_DO1 | REQ_COMPLETE_CALLBACK, &test_server_req_parm, test_server_completed_func, 0x2468);
if (ret) {
printf("server_request_async faild = %d!!!\n", ret);
}
test_server_req_parm.cmd = 0xe;
ret = server_request_async(test_server_hdl, TEST_REQ_DO2 | REQ_COMPLETE_CALLBACK, &test_server_req_parm, test_server_completed_func, 0x246A);
if (ret) {
printf("server_request_async faild = %d!!!\n", ret);
}
}
//清除服务队列还没执行的 server_event_handler 事件通知, 参数必须与server_event_handler指定事件相同
argv[0] = TEST_SERVER_EVENT;
argv[1] = 0x13579;
ret = server_event_handler_del(test_server_hdl, sizeof(argv) / sizeof(argv[0]), argv);
if (ret && ret != OS_Q_ERR) {
printf("server_event_handler_del faild = %d!!!\n", ret);
}
//关闭服务,释放资源
server_close(test_server_hdl);
}
static int c_main(void)
{
printf("\r\n\r\n\r\n\r\n\r\n -----------server_example run %s -------------\r\n\r\n\r\n\r\n\r\n", __TIME__);
thread_fork("server_example_task", 13, 1000, 128, NULL, server_example_task, NULL);
return 0;
}
late_initcall(c_main);
#endif