Esempio n. 1
0
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;
}
Esempio n. 2
0
si_t application_exec()
{
    /**
     * parse the application before execute
     **/
    application_parse();

	event_listener_add_read_event(&global_application.app_event_listener, &global_application.uds, NULL, application_event_handler, NULL);

	while(!queue_empty(&global_application.message_queue))
	{
		union message* msg = queue_front(&global_application.message_queue);
		application_handle_message(msg);
		queue_pop(&global_application.message_queue);
	}

	global_application.exec_flag = 1;
	if(0 != event_listener_exec(&global_application.app_event_listener))
	{
		EGUI_PRINT_ERROR("failed to run event_listener.");
		return -1;
	}
	global_application.exec_flag = 0;

    return 0;
}
Esempio n. 3
0
/**
 * @brief 初始化通信模块
 *
 * @param server_path 配置项 窗口管理器的socket路径
 *
 * @return 成功返回0 否则返回-1
 **/
static si_t comm_init(char* server_path)
{
	int i = 0;
	/**
	 * 初始化窗口管理器的通信句柄 用来接受用户应用程序的连接请求
	 **/
	if(0 != uds_init(&global_wm.uds, SOCK_STREAM, server_path, PEER_ROLE_SERVER))
	{
		EGUI_PRINT_ERROR("Failed to init server uds");
		return -1;
	}

	/**
	 * 初始化监听事件的event_listener
	 **/
	event_listener_init(&global_wm.server_listener);

	/**
	 * 添加event_listener监听来自窗口管理器通信句柄的读请求 若有读请求发生则调用window_manager_accept_handler处理
	 * 析构函数为简单关闭通信句柄
	 **/
	event_listener_add_read_event(&global_wm.server_listener, &global_wm.uds, NULL, window_manager_accept_handler, NULL);

	/**
	 * 设置对来自客户端的请求处理函数
	 *
	 * 当客户端建立连接后 在window_manager_accept_handler中 将调用server_lib的接口添加一个客户端
	 * server_lib添加客户端的具体实现是 将这个客户端句柄添加到event_listener里面监听读请求 并使用server_lib内部的事件处理函数
	 * server_lib内部的事件处理函数 将来自客户端的绘图请求直接调用绘图模块的函数处理 然后将函数返回值发回回应包
	 * 而来自客户端需要窗口管理器处理的窗口/应用程序管理类的请求 则通过窗口管理器在window_manger_set_request_handler里面设置的处理函数处理
	 **/
	window_manager_set_request_handler();

	/**
	 * 设置对来自输入设备的请求处理函数
	 * 事件处理函数为window_manager_input_handler 析构函数为input_exit对应的函数
	 **/
	for(i = 0; i != vector_size(&global_wm.input_device_vector); ++ i)
	{
		struct input_device* device_ptr = vector_at(&global_wm.input_device_vector, i);
		event_listener_add_read_event(&global_wm.server_listener, &device_ptr->uds, device_ptr, window_manager_input_handler, window_manager_input_destructor);
	}
	return 0;
}
Esempio n. 4
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;
}
Esempio n. 5
0
/**
 * 服务器连接处理函数:这个函数是event_listener里面服务器端通信句柄对应的回调函数
 * 接受客户端的通信句柄,将其添加到event_listener中
 **/
si_t server_accept_handler(struct egui_uds* uds_ptr, addr_t arg)
{
	struct event_listener* server_listener = (struct event_listener*)arg;
	struct egui_uds new_uds;

	EGUI_PRINT_INFO("callback server_accept_handler() is called");

	if(0 != accept_as_uds(uds_ptr, &new_uds))
	{
		EGUI_PRINT_ERROR("Failed to accept client connection");
		return SELECTER_RETURN_TYPE_CONTINUE;
	}

	event_listener_add_read_event(server_listener, &new_uds, NULL, client_request_handler, uds_destructor);

	return SELECTER_RETURN_TYPE_CONTINUE;
}
Esempio n. 6
0
extern void server_lib_add_new_client(struct egui_uds* uds_ptr, addr_t app_addr)
{
    event_listener_add_read_event(server_lib_event_listener_ptr, uds_ptr, app_addr, _event_listener_handler, _server_lib_exit_handler);
}