GDBUS使用框架

服务端生成文件:gdbus-codegen --generate-c-code=libtunerservice interface-S-A.xml

客户端生成文件:gdbus-codegen --generate-c-code=libservice-c  --c-generate-object-manager interface-S-A.xml

CLIENT:

**************添加客户端的生成的文件****************

(1)获取总线代理者:

      com_company_tunerservice_dbus_s_proxy_new_for_bus_sync

(2)信号与回调函数的绑定:

      g_signal_connect(poxy, "seek_status", G_CALLBACK(on_sig_seek_status), NULL);

         ***seek_status======================>根据生成的.c文件

(3)回调函数的实现

         ***on_sig_seek_status================>根据生成的.c文件

(4)事件的轮回上报

      loop = g_main_loop_new(NULL, FALSE);

      g_main_loop_run(loop);

      g_object_unref(poxy);

SERVER:

**************添加服务端的生成的文件****************

(1)创建一个总线

       guint ownName = g_bus_own_name (G_BUS_TYPE_SYSTEM ,
                                    "com.company.tunerservice.dbus.s",
                                    G_BUS_NAME_OWNER_FLAGS_NONE,
                                    bus_acquired_handler,
                                    name_acquired_handler,
                                    name_lost_handler,
                                    NULL,
                                    NULL);

        ***bus_acquired_handler、name_acquired_handler、name_lost_handler实现这3个回调函数

              ***bus_acquired_handler中需要

                          ***g_Skeleton = com_company_tunerservice_dbus_s_skeleton_new();***建立一个骨架

                          ***g_signal_connect(g_Skeleton, "handle-set-tuner-station", G_CALLBACK(handle_set_tuner_station), NULL);

                                        ***handle-set-tuner-station====================>根据服务端生成的.c文件

                                        ***handle_set_tuner_station===================>参数根据服务端生成的.c文件,实现这个回调函数

 g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(g_Skeleton),========>骨架输出
                                     connection,
                                     "/",
                                     &pError);

(2)运行总线服务代理

    loop = g_main_loop_new(NULL, FALSE);
    g_print("g_main_loop_new\n");
    if(loop!=NULL)
    {
         g_main_loop_run(loop);
         g_print("g_main_loop_run\n");
    }


    g_bus_unown_name(ownName);
    g_print("g_bus_unown_name\n");

猜你喜欢

转载自blog.csdn.net/qq_16810885/article/details/93976267