Beispiel #1
0
/*===========================================================================*
 *		            sef_cb_init_fresh                                *
 *===========================================================================*/
static int sef_cb_init_fresh(int type, sef_init_info_t *info)
{
    /* Initialize the pipe file server. */
    int i;
    struct passwd *pw;

    /* Initialize main loop parameters. */
    exitsignaled = 0;	/* No exit request seen yet. */
    busy = 0;		/* Server is not 'busy' (i.e., inodes in use). */

    /* Init inode table */
    for (i = 0; i < PFS_NR_INODES; ++i) {
        inode[i].i_count = 0;
    }

    init_inode_cache();
    uds_init();
    buf_pool();


    /* Drop root privileges */
    if ((pw = getpwnam(SERVICE_LOGIN)) == NULL) {
        printf("PFS: unable to retrieve uid of SERVICE_LOGIN, "
               "still running as root");
    } else if (setuid(pw->pw_uid) != 0) {
        panic("unable to drop privileges");
    }

    SELF_E = getprocnr();

    return(OK);
}
Beispiel #2
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;
}
Beispiel #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;
}
Beispiel #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;
}
Beispiel #5
0
/*===========================================================================*
 *		            sef_cb_init_fresh                                *
 *===========================================================================*/
PRIVATE int sef_cb_init_fresh(int type, sef_init_info_t *info)
{
/* Initialize the pipe file server. */
  int i;

  /* Initialize main loop parameters. */
  exitsignaled = 0;	/* No exit request seen yet. */
  busy = 0;		/* Server is not 'busy' (i.e., inodes in use). */

  /* Init inode table */
  for (i = 0; i < NR_INODES; ++i) {
	inode[i].i_count = 0;
  }
	
  init_inode_cache();
  uds_init();

  SELF_E = getprocnr();
  buf_pool();

  driver_announce();

  return(OK);
}
Beispiel #6
0
si_t application_init(si_t video_access_mode, si_t application_type, char* name)
{
	/**
	 * 加载配置项
	 **/
	if(0 != application_load_config())
	{
		EGUI_PRINT_ERROR("failed to load config.");
		return -1;
	}

	/**
	 * 初始化客户端通信句柄
	 **/
	if(0 != uds_init(&global_application.uds, SOCK_STREAM, global_application.server_path, PEER_ROLE_CLIENT))
	{
		EGUI_PRINT_ERROR("Failed to init client uds");
		return -1;
	}
	/**
	 * 初始化消息队列
	 **/
	queue_init(&global_application.message_queue);
	client_lib_init(&global_application.uds, &global_application.message_queue);

	/**
	 * 初始化event_listener
	 **/
	event_listener_init(&global_application.app_event_listener);
	global_application.exec_flag = 0;

    /**
     * init focus list
     **/
    list_init(&(global_application.focus_list));

    /* 初始化向量 */
    vector_init(&(global_application.window_vector));

	/**
	 * 应用程序名称
	 **/
	global_application.name = malloc(strlen(name) + 1);
	if(NULL == global_application.name)
	{
		EGUI_PRINT_SYS_ERROR("failed to malloc for application name %s. malloc()", name);
		return -1;
	}
	strncpy(global_application.name, name, strlen(name) + 1);
	global_application.application_type = application_type;

	if(0 != register_application(video_access_mode, application_type, name))
	{
		EGUI_PRINT_ERROR("failed to register application %s.", name);
		return -1;
	}

    global_application.focus = NULL;
    global_application.main_window = NULL;

	global_application.desktop_ptr = NULL;
	global_application.desktop_msg_handler = NULL;

    term_init();

    return 0;
}
Beispiel #7
0
int main()
{
	struct egui_uds client_uds = {0};
	si_t s_width = 0, s_height = 0, gd = 0;
	const char test_str[] = "hello, egui!";
	struct rectangle area = {0};
	/**
	 * 初始化客户端通信句柄
	 **/
	if(0 != uds_init(&client_uds, SOCK_STREAM, SERVER_PATH, PEER_ROLE_CLIENT))
	{
		EGUI_PRINT_ERROR("Failed to init server uds");
		return -1;
	}

	/**
	 * 初始化客户端
	 **/
	client_lib_init(&client_uds, NULL);
	EGUI_PRINT_INFO("client init sucessfully!");

	/**
	 * 获取屏幕的高和宽,输出
	 **/
	s_width = get_screen_width();
	s_height = get_screen_height();
	if(s_width < 0 || s_height < 0)
	{
		EGUI_PRINT_ERROR("failed to get screen width or height");
		return -1;
	}
	EGUI_PRINT_INFO("screen width = %d, height = %d", (int)s_width, (int)s_height);

	/**
	 * 初始化图形设备
	 **/
	gd = graphics_device_init(300, 300, 1000, 600, 255, 0, 0, 0, FONT_MATRIX_12);
	if(gd < 0)
	{
		EGUI_PRINT_ERROR("failed to init gd");
		return -1;
	}

	/**
	 * 显示字符串:hello egui
	 **/
	if(0 != show_text(gd, 300, 300, test_str, strlen(test_str)) 
		|| 0 != update(gd))
	{
		EGUI_PRINT_ERROR("failed to show test \"%s\"", test_str);
		return -1;
	}

	/**
	 * 图形设备退出
	 **/
	if(0 != graphics_device_exit(gd))
	{
		EGUI_PRINT_ERROR("failed to exit graph device");
		return -1;
	}

	/**
	 * 最大化窗口,输出返回的窗口大小
	 **/
	if(0 != maximize_window(10, &area))
	{
		EGUI_PRINT_ERROR("failed to max window");
		return -1;
	}
	EGUI_PRINT_INFO("maximize window area = (%d, %d), %d, %d", (int)area.x, (int)area.y, (int)area.width, (int)area.height);

	if(0 != window_manager_quit())
	{
		EGUI_PRINT_ERROR("failed to let window manager quit");
		return -1;
	}

	/**
	 * 清理通信句柄
	 **/
	if(0 != uds_exit(&client_uds))
	{
		EGUI_PRINT_ERROR("failed to clean uds");
		return -1;
	}
	return 0;
}