Function gio::bus_own_name
source · pub fn bus_own_name<BusAcquired, NameAcquired, NameLost>(
bus_type: BusType,
name: &str,
flags: BusNameOwnerFlags,
bus_acquired: BusAcquired,
name_acquired: NameAcquired,
name_lost: NameLost
) -> OwnerId
Expand description
Starts acquiring name
on the bus specified by bus_type
and calls
name_acquired_handler
and name_lost_handler
when the name is
acquired respectively lost. Callbacks will be invoked in the
[thread-default main context][g-main-context-push-thread-default]
of the thread you are calling this function from.
You are guaranteed that one of the name_acquired_handler
and name_lost_handler
callbacks will be invoked after calling this function - there are three
possible cases:
-
name_lost_handler
with aNone
connection (if a connection to the bus can’t be made). -
bus_acquired_handler
thenname_lost_handler
(if the name can’t be obtained) -
bus_acquired_handler
thenname_acquired_handler
(if the name was obtained).
When you are done owning the name, just call g_bus_unown_name()
with the owner id this function returns.
If the name is acquired or lost (for example another application
could acquire the name if you allow replacement or the application
currently owning the name exits), the handlers are also invoked.
If the DBusConnection
that is used for attempting to own the name
closes, then name_lost_handler
is invoked since it is no longer
possible for other processes to access the process.
You cannot use g_bus_own_name()
several times for the same name (unless
interleaved with calls to g_bus_unown_name()
) - only the first call
will work.
Another guarantee is that invocations of name_acquired_handler
and name_lost_handler
are guaranteed to alternate; that
is, if name_acquired_handler
is invoked then you are
guaranteed that the next time one of the handlers is invoked, it
will be name_lost_handler
. The reverse is also true.
If you plan on exporting objects (using e.g.
g_dbus_connection_register_object()
), note that it is generally too late
to export the objects in name_acquired_handler
. Instead, you can do this
in bus_acquired_handler
since you are guaranteed that this will run
before name
is requested from the bus.
This behavior makes it very simple to write applications that wants
to [own names][gdbus-owning-names] and export objects.
Simply register objects to be exported in bus_acquired_handler
and
unregister the objects (if any) in name_lost_handler
.
bus_type
the type of bus to own a name on
name
the well-known name to own
flags
a set of flags from the BusNameOwnerFlags
enumeration
bus_acquired_handler
handler to invoke when connected to the bus of type bus_type
or None
name_acquired_handler
handler to invoke when name
is acquired or None
name_lost_handler
handler to invoke when name
is lost or None
Returns
an identifier (never 0) that can be used with
g_bus_unown_name()
to stop owning the name.