首页 > rpc相关项目中的c函数里面的svc_name的作用是什么,一般都是只是注册函数,这里是不是用了hash结构,方便查找?

rpc相关项目中的c函数里面的svc_name的作用是什么,一般都是只是注册函数,这里是不是用了hash结构,方便查找?

searpc_server_register_function ("seafserv-threaded-rpcserver",
                                 seafile_check_passwd,
                                 "seafile_check_passwd",
                                 searpc_signature_int__string_string());
searpc_server_register_function ("seafserv-threaded-rpcserver",
                                 seafile_set_passwd,
                                 "seafile_set_passwd",
                                 searpc_signature_int__string_string_string());
searpc_server_register_function ("seafserv-threaded-rpcserver",
                                 seafile_unset_passwd,
                                 "seafile_unset_passwd",
                                 searpc_signature_int__string_string());
searpc_server_register_function ("seafserv-rpcserver",
                                 seafile_is_passwd_set,
                                 "seafile_is_passwd_set",
                                 searpc_signature_int__string_string());
searpc_server_register_function ("seafserv-rpcserver",
                                 seafile_get_decrypt_key,
                                 "seafile_get_decrypt_key",
                                 searpc_signature_object__string_string());
gboolean 
searpc_server_register_function (const char *svc_name,
                                 void *func, const gchar *fname, gchar *signature)
{
    SearpcService *service;
    FuncItem *item;
    MarshalItem *mitem;

    g_assert (svc_name != NULL && func != NULL && fname != NULL && signature != NULL);

    service = g_hash_table_lookup (service_table, svc_name);
    if (!service)
        return FALSE;

    mitem = g_hash_table_lookup (marshal_table, signature);
    if (!mitem) {
        g_free (signature);
        return FALSE;
    }

    item = g_new0 (FuncItem, 1);
    item->marshal = mitem;
    item->fname = g_strdup(fname);
    item->func = func;

    g_hash_table_insert (service->func_table, (gpointer)item->fname, item);

    g_free (signature);
    return TRUE;
}


C程序中是不提供根据函数名获取函数指针的,而RPC的结构中,又非常需要根据函数名来找到函数,所以自然需要一个映射来将函数名和具体的函数以及相关信息组合起来,而Hash正好符合存储这些映射的结构。

【热门文章】
【热门文章】