类
GioDBusObjectManagerClient
since: 2.30
描述 [src]
class Gio.DBusObjectManagerClient : GObject.Object
implements Gio.AsyncInitable, Gio.DBusObjectManager, Gio.Initable {
/* No available fields */
}
GDBusObjectManagerClient 用于创建、监控和删除由 GDBusObjectManagerServer (或任何实现 org.freedesktop.DBus.ObjectManager 接口的代码)导出的远程对象的代理。
创建此类的一个实例后,您可以连接到 GDBusObjectManager::object-added 和 [信号@Gio.DBusObjectManager::object-removed] 信号,并检查由 g_dbus_object_manager_get_objects() 返回的 GDBusObjectProxy 对象。
如果 GDBusObjectManagerClient 的名称在对象构造时没有人拥有,则默认行为会请求消息总线启动一个用于该名称的所有者。此行为可以使用 G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START 标志来禁用。还应注意,这仅适用于原始名称可以激活的情况。例如,在某些情况下,无法启动请求名称的所有者。在这种情况下,GDBusObjectManagerClient 对象构造操作仍然成功,但将没有对象代理(例如,g_dbus_object_manager_get_objects() 返回空列表),并且 GDBusObjectManagerClient:name-owner 属性为 NULL。
请求的名称的所有者可以来去自如(例如考虑系统服务的重启)—— GDBusObjectManagerClient 也处理这种情况;只需连接到 GObject::notify 信号来监视 GDBusObjectManagerClient:name-owner 属性的变化。当名称所有者消失时,GDBusObjectManagerClient:name-owner 被设置为 NULL(这包括发出 GObject::notify 信号)并随后对所有现有对象代理合成 GDBusObjectManager::object-removed 信号。由于在这种情况发生时 GDBusObjectManagerClient:name-owner 是 NULL,你可以使用这条信息来区分合成信号和由远程 GDBusObjectManager 对象删除引起的真正信号。同样,当新的名称所有者出现时,GDBusObjectManager::object-added 信号被合成而此时 GDBusObjectManagerClient:name-owner 仍然是 NULL。只有当所有对象代理都已添加,GDBusObjectManagerClient:name-owner 才被设置为新的名称所有者(这包括发出 GObject::notify 信号)。此外,你还可以确保 GDBusObjectManagerClient:name-owner 将在名称所有者(例如 :1.42)和 NULL 之间切换,即使在感兴趣的名字被原子替换的情况下也是如此。
最终,使用 GDBusObjectManagerClient 获取 GDBusProxy 实例。所有发送到 GDBusProxy 实例的信号(包括 org.freedesktop.DBus.Properties::PropertiesChanged 信号)都保证来自名称所有者。这个保证以及上述行为意味着一定的竞争条件,包括“代理的一半来自旧所有者,另一半来自新所有者”的问题不可能发生。
为了避免应用程序连接到返回的 GDBusObjectProxy 和 GDBusProxy 对象上的信号,GDBusObject::interface-added、GDBusObject::interface-removed、GDBusProxy::g-properties-changed 和 GDBusProxy::g-signal 信号也将在管理这些对象的 GDBusObjectManagerClient 实例上发出。发出的信号是 GDBusObjectManager::interface-added、GDBusObjectManager::interface-removed、GDBusObjectManagerClient::interface-proxy-properties-changed 和 GDBusObjectManagerClient::interface-proxy-signal。
请注意,所有回调和信号都在线程默认的主上下文中发出(请参阅g_main_context_push_thread_default()),这是GDBusObjectManagerClient对象被构建的地方。此外,从GDBusObjectManagerClient对象起源的GDBusObjectProxy和GDBusProxy对象将创建在相同的上下文中,因此将在相同的主循环中传递信号。
自:2.30版开始
构造函数
g_dbus_object_manager_client_new_for_bus_finish
完成由g_dbus_object_manager_client_new_for_bus()启动的操作。
since: 2.30
g_dbus_object_manager_client_new_for_bus_sync
与g_dbus_object_manager_client_new_sync()类似,但用GBusType代替GDBusConnection。
since: 2.30
函数
g_dbus_object_manager_client_new_for_bus
与g_dbus_object_manager_client_new()类似,但用GBusType代替GDBusConnection。
since: 2.30
实例方法
g_dbus_object_manager_client_get_name_owner
manager所拥有的唯一名称,或者如果没有人为该名称拥有,则为NULL。您可以通过连接到GObject::notify信号来跟踪GDBusObjectManagerClient:name-owner属性的更改。
since: 2.30
从GAsyncInitable继承的方法(3)
g_async_initable_init_async
开始实现该接口的对象的异步初始化。必须在对象在初始构造后实际使用之前完成此操作。如果对象还实现了GInitable,则可以选择调用g_initable_init()。
自:2.22
g_async_initable_init_finish
完成异步初始化并返回结果。请参阅g_async_initable_init_async()。
自:2.22
g_async_initable_new_finish
完成各种g_async_initable_new调用的异步构建,返回创建的对象或在出错时返回NULL。
自:2.22
从GDBusObjectManager继承的方法(4)
g_dbus_object_manager_get_interface
获取在object_path上的interface_name的接口代理,如果有。
since: 2.30
g_dbus_object_manager_get_object
获取object_path上的GDBusObject,如果有。
since: 2.30
g_dbus_object_manager_get_object_path
获取manager的对象路径。
since: 2.30
g_dbus_object_manager_get_objects
获取manager知道的所有的GDBusObject对象。
since: 2.30
从GInitable继承的方法(1)
属性
Gio.DBusObjectManagerClient:bus-type
如果此属性不是G_BUS_TYPE_NONE,则GDBusObjectManagerClient:connection必须为NULL并将设置为通过调用g_bus_get()与此属性的值获得的GDBusConnection。
since: 2.30
Gio.DBusObjectManagerClient:get-proxy-type-destroy-notify
为 GDBusObjectManagerClient:get-proxy-type-user-data 中的 #gpointer user_data 注册一个 GDestroyNotify。
since: 2.30
Gio.DBusObjectManagerClient:get-proxy-type-func
在确定接口代理或使用 NULL 时使用的 GDBusProxyTypeFunc。
since: 2.30
Gio.DBusObjectManagerClient:get-proxy-type-user-data
传递给 GDBusObjectManagerClient:get-proxy-type-func 的 #gpointer user_data。
since: 2.30
Gio.DBusObjectManagerClient:name-owner
拥有 GDBusObjectManagerClient:name 的唯一名称,或如果目前没有人拥有该名称则为 NULL。连接到 GObject::notify 信号以跟踪此属性的变化。
since: 2.30
信号
Gio.DBusObjectManagerClient::interface-proxy-properties-changed
当代理上的一个或多个 D-Bus 属性发生改变时触发。当此信号触发时,本地缓存已经被更新。请注意,changed_properties 和 invalidated_properties 都保证永远不会为 NULL(尽管它们可能为空)。
since: 2.30
从 GObject 继承的信号(1)
GObject::notify
当使用 g_object_set_property()、g_object_set() 等设置对象的属性值时,会发出 notify 信号。
从 GDBusObjectManager 继承的信号(4)
GDBusObjectManager::interface-added
当 interface 被添加到 object 时触发。
since: 2.30
GDBusObjectManager::interface-removed
当 interface 从 object 中删除时触发。
since: 2.30
GDBusObjectManager::object-added
当 object 被添加到 manager 时触发。
since: 2.30
GDBusObjectManager::object-removed
当 object 从 manager 中删除时触发。
since: 2.30
类结构
struct GioDBusObjectManagerClientClass {
GObjectClass parent_class;
void (* interface_proxy_signal) (
GDBusObjectManagerClient* manager,
GDBusObjectProxy* object_proxy,
GDBusProxy* interface_proxy,
const gchar* sender_name,
const gchar* signal_name,
GVariant* parameters
);
void (* interface_proxy_properties_changed) (
GDBusObjectManagerClient* manager,
GDBusObjectProxy* object_proxy,
GDBusProxy* interface_proxy,
GVariant* changed_properties,
const gchar* const* invalidated_properties
);
}
GDBusObjectManagerClient 的类结构。
类成员
parent_class: GObjectClass父类。
interface_proxy_signal: void (* interface_proxy_signal) ( GDBusObjectManagerClient* manager, GDBusObjectProxy* object_proxy, GDBusProxy* interface_proxy, const gchar* sender_name, const gchar* signal_name, GVariant* parameters )GDBusObjectManagerClient::interface-proxy-signal信号的类处理函数。interface_proxy_properties_changed: void (* interface_proxy_properties_changed) ( GDBusObjectManagerClient* manager, GDBusObjectProxy* object_proxy, GDBusProxy* interface_proxy, GVariant* changed_properties, const gchar* const* invalidated_properties )GDBusObjectManagerClient::interface-proxy-properties-changed信号的类处理函数。
虚方法
Gio.DBusObjectManagerClientClass.interface_proxy_properties_changed
GDBusObjectManagerClient::interface-proxy-properties-changed 信号的类处理函数。
Gio.DBusObjectManagerClientClass.interface_proxy_signal
GDBusObjectManagerClient::interface-proxy-signal 信号的类处理函数。