Как я могу преобразовать GDBusInterface в GDBusProxy? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь написать C, который использует поддержку DBus в GLib GIO.

У меня есть 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 голосов
/ 31 января 2019

GDBusInterface - это интерфейс, который реализован классом GDBusProxy, поэтому у вас уже есть GDBusProxy - вам просто нужно привести его к нужному типу, что вы можете сделать, используя G_DBUS_PROXY (interface).

В зависимости от того, используете ли вы экземпляры прокси, сгенерированные gdbus-codegen, вы можете либо проверить, является ли он экземпляром прокси для org.bluez.Adapter1, используя макрос из сгенерированного кода, например MY_NAMESPACE_IS_ADAPTER1 (interface);или вы можете проверить имя интерфейса вручную, используя g_str_equal (g_dbus_proxy_get_interface_name (G_DBUS_PROXY (interface)), "org.bluez.Adapter1").

Обратите внимание, что g_dbus_proxy_get_name() вернет известное или уникальное имя шины, для которого предназначен прокси-сервер, которое не совпадает с именем интерфейса. хорошо известное или уникальное имя идентифицирует одноранговый узел (обычно другой процесс) на шине.Этот узел открывает доступ к объектам на путях к объектам , и каждый объект реализует один или несколько интерфейсов .

...