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-ownerNULL,你可以使用这条信息来区分合成信号和由远程 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 信号)都保证来自名称所有者。这个保证以及上述行为意味着一定的竞争条件,包括“代理的一半来自旧所有者,另一半来自新所有者”的问题不可能发生。

为了避免应用程序连接到返回的 GDBusObjectProxyGDBusProxy 对象上的信号,GDBusObject::interface-addedGDBusObject::interface-removedGDBusProxy::g-properties-changedGDBusProxy::g-signal 信号也将在管理这些对象的 GDBusObjectManagerClient 实例上发出。发出的信号是 GDBusObjectManager::interface-addedGDBusObjectManager::interface-removedGDBusObjectManagerClient::interface-proxy-properties-changedGDBusObjectManagerClient::interface-proxy-signal

请注意,所有回调和信号都在线程默认的主上下文中发出(请参阅g_main_context_push_thread_default()),这是GDBusObjectManagerClient对象被构建的地方。此外,从GDBusObjectManagerClient对象起源的GDBusObjectProxyGDBusProxy对象将创建在相同的上下文中,因此将在相同的主循环中传递信号。

自:2.30版开始

[]

祖先

[]

构造函数

g_dbus_object_manager_client_new_finish

完成由g_dbus_object_manager_client_new()启动的操作。

since: 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_sync

创建一个新的GDBusObjectManagerClient对象。

since: 2.30

[]

函数

g_dbus_object_manager_client_new

异步创建一个新的GDBusObjectManagerClient对象。

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_connection

获取manager使用的GDBusConnection

since: 2.30

g_dbus_object_manager_client_get_flags

获取构造manager时使用的标志。

since: 2.30

g_dbus_object_manager_client_get_name

获取manager是为哪个名字,如果没有消息总线连接则为NULL

since: 2.30

g_dbus_object_manager_client_get_name_owner

manager所拥有的唯一名称,或者如果没有人为该名称拥有,则为NULL。您可以通过连接到GObject::notify信号来跟踪GDBusObjectManagerClient:name-owner属性的更改。

since: 2.30

GObject继承的方法(43)
GAsyncInitable继承的方法(3)
GDBusObjectManager继承的方法(4)
GInitable继承的方法(1)
[]

属性

Gio.DBusObjectManagerClient:bus-type

如果此属性不是G_BUS_TYPE_NONE,则GDBusObjectManagerClient:connection必须为NULL并将设置为通过调用g_bus_get()与此属性的值获得的GDBusConnection

since: 2.30

Gio.DBusObjectManagerClient:connection

要使用的GDBusConnection

since: 2.30

Gio.DBusObjectManagerClient:flags

GDBusObjectManagerClientFlags枚举的标志。

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

管理器所对应的好知名或唯一名称。

since: 2.30

Gio.DBusObjectManagerClient:name-owner

拥有 GDBusObjectManagerClient:name 的唯一名称,或如果目前没有人拥有该名称则为 NULL。连接到 GObject::notify 信号以跟踪此属性的变化。

since: 2.30

Gio.DBusObjectManagerClient:object-path

管理器所对应的对象路径。

since: 2.30

[]

信号

Gio.DBusObjectManagerClient::interface-proxy-properties-changed

当代理上的一个或多个 D-Bus 属性发生改变时触发。当此信号触发时,本地缓存已经被更新。请注意,changed_propertiesinvalidated_properties 都保证永远不会为 NULL(尽管它们可能为空)。

since: 2.30

Gio.DBusObjectManagerClient::interface-proxy-signal

interface_proxy 收到 D-Bus 信号时触发。

since: 2.30

GObject 继承的信号(1)
GDBusObjectManager 继承的信号(4)

类结构

[]

虚方法

Gio.DBusObjectManagerClientClass.interface_proxy_properties_changed

GDBusObjectManagerClient::interface-proxy-properties-changed 信号的类处理函数。

Gio.DBusObjectManagerClientClass.interface_proxy_signal

GDBusObjectManagerClient::interface-proxy-signal 信号的类处理函数。