0

raw dbus lib を使用すると、送信者を指定せずに 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