si_t mouse_init(struct input_device * self, char * mouse_device_path, si_t double_click_delay) { si_t fd; if((fd = open(mouse_device_path, O_RDONLY)) < 0) { EGUI_PRINT_SYS_ERROR("failed to open mouse device: open()"); return -1; } uds_init_from_naked_socket(&self->uds, fd); self->deal_with_input = deal_with_mouse; self->input_exit = mouse_exit; mouse_double_click_delay = double_click_delay; return 0; }
si_t keybd_init(struct input_device * self, char * keybd_device_path) { si_t fd; fd = open(keybd_device_path, O_RDONLY); if(fd < 0) { EGUI_PRINT_SYS_ERROR("failed to open keybd device: open()"); return -1; } /* TODO:是否检查指针合法性? */ uds_init_from_naked_socket(&self->uds, fd); self->deal_with_input = deal_with_keybd; self->input_exit = keybd_exit; 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; }