register_object
Description:
Registers callbacks for exported objects at object_path
with the D-Bus interface that is described in interface_info
.
Calls to functions in vtable
(and user_data_free_func
) will happen in the thread-default main context of the
thread you are calling this method from.
Note that all Variant values passed to functions in vtable
will match the
signature given in interface_info
- if a remote caller passes incorrect values, the `org.freedesktop.DBus.Error.InvalidArgs` is
returned to the remote caller.
Additionally, if the remote caller attempts to invoke methods or access properties not mentioned in interface_info
the
`org.freedesktop.DBus.Error.UnknownMethod` resp. `org.freedesktop.DBus.Error.InvalidArgs` errors are returned to the caller.
It is considered a programming error if the
DBusInterfaceGetPropertyFunc function in vtable
returns a Variant of
incorrect type.
If an existing callback is already registered at object_path
and interface_name
, then
throws is set to g_io_error_exists.
GDBus automatically implements the standard D-Bus interfaces org.freedesktop.DBus.Properties, org.freedesktop.DBus.Introspectable and org.freedesktop.Peer, so you don't have to implement those for the objects you export. You can implement org.freedesktop.DBus.Properties yourself, e.g. to handle getting and setting of properties asynchronously.
Note that the reference count on interface_info
will be incremented by 1 (unless allocated statically, e.g. if the reference count
is -1, see @ref) for as long as the object is exported. Also note that
vtable
will be copied.
See this server for an example of how to use this method.
Parameters:
this | |
object_path |
the object path to register at |
interface_info |
introspection data for the interface |
user_data |
data to pass to functions in |
user_data_free_func |
function to call when the object path is unregistered |
vtable |
a DBusInterfaceVTable to call into or null |
Returns:
0 if throws is set, otherwise a registration id (never 0) that can be used with unregister_object |