如何将GDBusInterface转换为GDBusProxy?

时间:2019-01-30 22:16:15

标签: c glib dbus gobject gio

我正在尝试编写一些在GLib的GIO中使用DBus支持的C。

我有一个GDBusObjectManager,并且我已经使用g_signal_connect()interface-added信号添加了一个处理程序。根据文档,处理程序的签名为:

void
user_function (GDBusObjectManager *manager,
               GDBusObject        *object,
               GDBusInterface     *interface,
               gpointer            user_data)

我想检查添加的接口是否与我关心的接口(org.bluez.Adapter1)相匹配,然后从实现该接口的对象上从该接口调用一些方法。我相信第一步是检查接口名称是否匹配。我相信我可以通过与const gchar *g_dbus_proxy_get_name(GDBusProxy *proxy);的收益进行比较来做到这一点,但是我没有GDBusProxy,我有GDBusInterface。所以我的问题是:如何从GDBusProxy中获得GDBusInterface

1 个答案:

答案 0 :(得分:1)

GDBusInterface是由GDBusProxy类实现的接口,因此您已经拥有GDBusProxy -您只需要将其转换为正确的类型即可,您可以使用G_DBUS_PROXY (interface)

根据您是否正在使用gdbus-codegen生成的代理实例,然后可以使用生成的代码(例如{{1})中的宏来检查它是否是org.bluez.Adapter1的代理实例。 };或者您可以使用MY_NAMESPACE_IS_ADAPTER1 (interface)手动检查接口名称。

请注意,g_str_equal (g_dbus_proxy_get_interface_name (G_DBUS_PROXY (interface)), "org.bluez.Adapter1")将返回代理所使用的众所周知的或唯一的总线名称,该名称与接口名称不同。 well known or unique name标识总线上的同位体(通常是另一个进程)。该同位体在对象路径处公开对象,并且每个对象都实现一个或多个接口