0

使用原始 dbus 库,可以在 DBUS 接口上接收任何事件,而无需指定发送者。[完整示例][1]

dbus_bus_request_name(conn, "test.signal.sink", DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
dbus_bus_add_match(conn, "type='signal',interface='test.signal.Type'", &err);
dbus_connection_flush(conn);
//and later just validate the names
dbus_message_is_signal(msg, "test.signal.Type", "Test");

我找不到使用 glib gdbus-codegen 进行类似操作的答案/示例。您必须通过指向完整路径(应该是唯一的)将代理对象连接到远程 DBus 对象。

我的问题是实现信号接口的对象可能有很多名称未知。也许我做错了什么?

事件监听器的代码:

dbus_platform_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION, 0, DBUS_EVENTER_PATH, DBUS_EVENTER_OBJ_NAME, NULL, &error);

事件端的代码:

busId = g_bus_own_name(G_BUS_TYPE_SESSION, DBUS_EVENTER_PATH, G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT, NULL, on_name_acquired, NULL, NULL, NULL);

g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(dBusEventer), connection, DBUS_PLATFORM_EVENTER_OBJ_NAME, &error);

我想再次连接到接口而不使用侦听器端的 DBUS_EVENTER_PATH。[1]:https ://github.com/wware/stuff/blob/master/dbus-example/dbus-example.c

4

0 回答 0