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)

请参阅GObject 以获取方法的完整列表。

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)
g_initable_init

初始化实现接口的对象。

自:2.22

属性

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)
GObject::notify

当使用 g_object_set_property()、g_object_set() 等设置对象的属性值时,会发出 notify 信号。

GDBusObjectManager 继承的信号(4)
GDBusObjectManager::interface-added

interface 被添加到 object 时触发。

since: 2.30

GDBusObjectManager::interface-removed

interfaceobject 中删除时触发。

since: 2.30

GDBusObjectManager::object-added

object 被添加到 manager 时触发。

since: 2.30

GDBusObjectManager::object-removed

objectmanager 中删除时触发。

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 信号的类处理函数。