![]() |
![]() |
![]() |
GIO Reference Manual | ![]() |
---|
dbus-glib lets you create proxy objects for well-known names, like the following example:
proxy = dbus_g_proxy_new_for_name (system_bus_connection, "org.freedesktop.Accounts", "/org/freedesktop/Accounts", "org.freedesktop.Accounts");
For a DBusGProxy constructed like this, method calls will be sent to the current owner of the name, and that owner can change over time.
In contrast, GDBusProxy instances are always bound to a unique name. To get a proxy for a well-known name, you either have to call GetNameOwner yourself and construct a proxy for the unique name of the current name owner, or use the high-level API. The latter option is highly recommended:
static void on_proxy_appeared (GDBusConnection *connection, const gchar *name, const gchar *name_owner, GDBusProxy *proxy, gpointer user_data) { /* start to use proxy */ } /* ... */ watcher_id = g_bus_watch_proxy (G_BUS_TYPE_SYSTEM, "org.freedesktop.Accounts", G_BUS_NAME_WATCHER_FLAGS_NONE, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", G_TYPE_DBUS_PROXY, G_BUS_PROXY_FLAGS_NONE, on_proxy_appeared, on_proxy_vanished, NULL, NULL); g_main_loop_run (loop); g_bus_unwatch_proxy (watcher_id);
Like g_bus_own_name()
, g_bus_watch_proxy()
is asynchronous and
you are expected to enter your mainloop to await the on_proxy_appeared()
callback. Note that GDBus also does all the setup operations for the
proxy asynchronously, and only calls your callback when the proxy
is ready for use.