/* XXX Not using */ si_t application_quit() { si_t i, n; struct object * addr; /* 有多少个窗口 */ n = vector_size(&(global_application.window_vector)); /* 依次删除窗口 */ for(i = n - 1; i >= 0; -- i) { addr = vector_at(&global_application.window_vector, i); /* 这里没有逐个注销窗口类对象或者它的派生类对象。 因为窗口管理程序收到用户应用程序的退出请求后, 会释放关于这个用户应用程序的所有资源。 */ /* 释放这棵树 */ object_tree_free(addr->parent); /* 从窗口向量中删除这个节点 */ vector_erase(&global_application.window_vector, i); } vector_exit(&global_application.window_vector); event_listener_exit(&global_application.app_event_listener); uds_exit(&global_application.uds); free(global_application.name); return 0; }
/** * @brief 通信模块清理 **/ static void comm_exit() { /** * 清理event_listener 清理的同时将会close所有的通信句柄 **/ event_listener_exit(&global_wm.server_listener); }
int main(void) { struct event_listener server_listener; struct egui_uds server_uds; if(0 != uds_init(&server_uds, SOCK_STREAM, SERVER_PATH, PEER_ROLE_SERVER)) { EGUI_PRINT_ERROR("Failed to init server uds"); return -1; } event_listener_init(&server_listener); event_listener_add_read_event(&server_listener, &server_uds, &server_listener, server_accept_handler, NULL); if(0 != event_listener_exec(&server_listener)) { EGUI_PRINT_ERROR("failed to execute event_listener"); return -1; } event_listener_exit(&server_listener); if(0 != uds_exit(&server_uds)) { EGUI_PRINT_ERROR("failed to exit server uds"); return -1; } return 0; }
si_t application_exit() { struct object * addr; si_t i, n; /** * release focus list **/ list_exit(&(global_application.focus_list)); /* 有多少个窗口 */ n = vector_size(&(global_application.window_vector)); /* 依次删除窗口 */ for(i = n - 1; i >= 0; -- i) { addr = vector_at(&(global_application.window_vector), i); /* 这里没有逐个注销窗口类对象或者它的派生类对象。 因为窗口管理程序收到用户应用程序的退出请求后, 会释放关于这个用户应用程序的所有资源。 */ /* 释放这棵树 */ object_tree_free(addr->parent); /* 从窗口向量中删除这个节点 */ vector_erase(&(global_application.window_vector), i); } vector_exit(&(global_application.window_vector)); if(0 != cancel_application()) { EGUI_PRINT_ERROR("failed to cancle application"); } event_listener_exit(&global_application.app_event_listener); queue_exit(&global_application.message_queue); uds_exit(&global_application.uds); free(global_application.name); free(global_application.icon_root_path); term_restore(); return 0; }
int main(void) { struct event_listener client_listener; struct egui_uds client_uds; struct egui_uds stdin_uds; event_listener_init(&client_listener); /** * 初始化客户端通信句柄并将其对应的回调函数设置为server_message_handler **/ if(0 != uds_init(&client_uds, SOCK_STREAM, SERVER_PATH, PEER_ROLE_CLIENT)) { EGUI_PRINT_ERROR("Failed to init server uds"); return -1; } event_listener_add_read_event(&client_listener, &client_uds, NULL, server_message_handler, NULL); /** * 初始化标准输入通信句柄并将对应的回调函数设置为command_handler **/ uds_init_from_naked_socket(&stdin_uds, STDIN_FILENO); event_listener_add_read_event(&client_listener, &stdin_uds, &client_uds, command_handler, NULL); /** 打印帮助信息 **/ EGUI_PRINT_INFO(help_str); if(0 != event_listener_exec(&client_listener)) { EGUI_PRINT_ERROR("failed to execute event_listener"); return -1; } event_listener_exit(&client_listener); return 0; }