GioDBusProxy

自:2.26

描述 [src]

class Gio.DBusProxy : GObject.Object
  implements Gio.AsyncInitable, Gio.DBusInterface, Gio.Initable {
  /* No available fields */
}

GDBusProxy 是一个基类,用于访问远程对象上的 D-Bus 接口的代理。对于众所周知的名字和唯一名称,都可以构造 GDBusProxy

默认情况下,GDBusProxy 会缓存远程对象的全部属性(并持续监听更改),并代理发送的所有信号。当创建代理时,通过传递合适的 GDBusProxyFlags,可以更改此行为。如果代理属于众所周知的名字,那么当名称所有者消失时,属性缓存会被刷新,且当名称所有者出现时,属性缓存会被重新加载。

记录代理名称的唯一所有者名称,并可从中进行读取 GDBusProxy:g-name-owner。连接到 GObject::notify 信号以获取更改通知。另外,仅考虑当前名称所有者发出的信号和属性更改,并始终将调用发送给当前名称所有者。当一个所有者丢失名称,而另一个所有者声称对该名称拥有所有权时,这可避免多项竞态条件。但是,如果当前不存在名称所有者,则调用将发送到 well-known 名称,这可能会导致消息总线启动所有者(除非设置了 G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START)。

如果代理用于无状态 D-Bus 服务,并且在调用之间可能会启动和停止名称所有者,则 GDBusProxyGDBusProxy:g-name-owner 跟踪会导致代理在首次重启后放弃来自服务的信号和属性更改。在与无状态 D-Bus 服务交互时,请勿使用 GDBusProxy — 使用直接 D-Bus 方法调用和信号连接。

通用 GDBusProxy::g-properties-changedGDBusProxy::g-signal 信号使用起来不太方便。因此,使用代理的推荐方法是对 GDBusProxy 进行子类化,并在派生类中提供更自然的属性和信号。此 示例 说明了如何使用 gdbus-codegen 工具轻松实现此操作。

可以从多个线程使用 GDBusProxy 实例,但请注意所有信号(例如 GDBusProxy::g-signalGDBusProxy::g-properties-changedGObject::notify)都将在此实例构造所在的线程的线程默认主上下文中发出(请参阅 g_main_context_push_thread_default())。

可以在 gdbus-example-watch-proxy.c 中找到有关如何使用 well-known 名称的代理的示例。

自 2.26 起可用

祖先

构造函数

g_dbus_proxy_new_finish

完成创建 GDBusProxy

自:2.26

g_dbus_proxy_new_for_bus_finish

完成创建 GDBusProxy

自:2.26

g_dbus_proxy_new_for_bus_sync

g_dbus_proxy_new_sync() 类似,但使用 GBusType 而不是 GDBusConnection

自:2.26

g_dbus_proxy_new_sync

创建一个代理用于在 connection 处访问 name 所有、对象路径为 object_path 处的远程对象上的 interface_name,除非使用了 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES 标志,否则同步加载 D-Bus 属性。

自:2.26

函数

g_dbus_proxy_new

创建一个代理用于在位于 connection 处的、由 name 所有、对象路径为 object_path 的远程对象上访问 interface_name,除非使用了 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES 标记,否则异步加载 D-Bus 属性。连接到 GDBusProxy::g-properties-changed 信号以获取属性更改的通知。

自:2.26

g_dbus_proxy_new_for_bus

g_dbus_proxy_new() 类似,但使用 GBusType 而不是 GDBusConnection

自:2.26

实例方法

g_dbus_proxy_call

异步调用 proxy 上的 method_name 方法。

自:2.26

g_dbus_proxy_call_finish

完成使用 g_dbus_proxy_call() 启动的操作。

自:2.26

g_dbus_proxy_call_sync

同步调用 proxy 上的 method_name 方法。

自:2.26

g_dbus_proxy_call_with_unix_fd_list

g_dbus_proxy_call() 类似,但还采用 GUnixFDList 对象。

自 2.30 起提供

g_dbus_proxy_call_with_unix_fd_list_finish

使用 g_dbus_proxy_call_with_unix_fd_list() 开始一项操作。

自 2.30 起提供

g_dbus_proxy_call_with_unix_fd_list_sync

类似于 `g_dbus_proxy_call_sync()`,不过,它使用并返回 `GUnixFDList` 对象。

自 2.30 起提供

g_dbus_proxy_get_cached_property

从缓存中查找属性值。此调用不会阻止 IO

自:2.26

g_dbus_proxy_get_cached_property_names

获取 `proxy` 上所有缓存属性的名称。

自:2.26

g_dbus_proxy_get_connection

获取 `proxy` 所从属的连接。

自:2.26

g_dbus_proxy_get_default_timeout

获取超时时间,如果在 `g_dbus_proxy_call()` 和 `g_dbus_proxy_call_sync()` 函数中将 -1(指定默认超时时间)作为 `timeout_msec` 传递,则将使用该超时时间。

自:2.26

g_dbus_proxy_get_flags

获取 `proxy` 构造时所使用的标志位。

自:2.26

g_dbus_proxy_get_interface_info

如果存在,返回 `GDBusInterfaceInfo`,该信息指定 `proxy` 符合的接口。有关更多详细信息,请参阅 `GDBusProxy:g-interface-info` 属性。

自:2.26

g_dbus_proxy_get_interface_name

获取 `proxy` 所从属的 D-Bus 接口名称。

自:2.26

g_dbus_proxy_get_name

获取 `proxy` 构造时所使用的名称。

自:2.26

g_dbus_proxy_get_name_owner

拥有 `proxy` 所从属名称的唯一名称,或者,如果当前没有人拥有该名称,则为 `NULL`。你可以连接到 `GObject::notify` 信号,以跟踪 `GDBusProxy:g-name-owner` 属性的变更。

自:2.26

g_dbus_proxy_get_object_path

获取 `proxy` 所从属的对象路径。

自:2.26

g_dbus_proxy_set_cached_property

如果 `value` 不为 `NULL`,将名为 `property_name` 的属性的缓存值设置为 `value` 中的值。

自:2.26

g_dbus_proxy_set_default_timeout

设置超时时间,如果在 `g_dbus_proxy_call()` 和 `g_dbus_proxy_call_sync()` 函数中将 -1(指定默认超时时间)作为 `timeout_msec` 传递,则将使用该超时时间。

自:2.26

g_dbus_proxy_set_interface_info

确保与 `proxy` 的交互符合所给接口。有关更多详细信息,请参阅 `GDBusProxy:g-interface-info` 属性。

自:2.26

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

GDBusInterface 继承的方法 (4)
g_dbus_interface_dup_object

获取 `interface_` 所从属的 `GDBusObject`(如果存在)。

版本:2.32

g_dbus_interface_get_info

获取 `interface_` 所实现的 D-Bus 接口的 D-Bus 自省信息。

自 2.30 起提供

g_dbus_interface_get_object

获取 `interface_` 所从属的 `GDBusObject`(如果存在)。

自 2.30 起提供

g_dbus_interface_set_object

将 `interface_` 的 `GDBusObject` 设置为 `object`。

自 2.30 起提供

GInitable 继承的方法 (1)
g_initable_init

初始化实现该接口的对象。

版本:2.22

属性

Gio.DBusProxy:g-bus-type

如果此属性不为 `G_BUS_TYPE_NONE`,则 `GDBusProxy:g-connection` 必须为 `NULL`,并且将通过使用此属性的值调用 `g_bus_get()` 来将其设置为获取的 `GDBusConnection`。

自:2.26

Gio.DBusProxy:g-connection

代理所属的 GDBusConnection

自:2.26

Gio.DBusProxy:g-default-timeout

g_dbus_proxy_call()g_dbus_proxy_call_sync() 函数中以 -1(指定默认超时)作为 timeout_msec 传递时要使用的超时。

自:2.26

Gio.DBusProxy:g-flags

来自 GDBusProxyFlags 枚举的标志。

自:2.26

Gio.DBusProxy:g-interface-info

确保与此代理的交互符合给定接口。这主要用于确保忽略从其他对等方收到的格式错误的数据。给定的 GDBusInterfaceInfo 被称为“预期接口”。

自:2.26

Gio.DBusProxy:g-interface-name

代理所属的 D-Bus 接口名称。

自:2.26

Gio.DBusProxy:g-name

代理所属的知名或唯一名称。

自:2.26

Gio.DBusProxy:g-name-owner

拥有 GDBusProxy:g-nameNULL 的唯一名称(如果当前没有人拥有该名称)。您可以连接到 GObject::notify 信号以跟踪此属性的更改。

自:2.26

Gio.DBusProxy:g-object-path

代理所属的对象路径。

自:2.26

信号

Gio.DBusProxy::g-properties-changed

proxy 上的一个或多个 D-Bus 属性更改时发出。当此信号触发时,本地高速缓存已经更新。请注意,changed_propertiesinvalidated_properties 都保证永远不会为 NULL(尽管可能两者都为空)。

自:2.26

Gio.DBusProxy::g-signal

当从 proxy 所属的远程对象和接口收到信号时发出。

自:2.26

GObject (1) 继承的信号
GObject::notify

当某个属性通过 g_object_set_property()、g_object_set() 等设置其值时,在对象上发出 notify 信号。

类结构

struct GioDBusProxyClass {
  void (* g_properties_changed) (
    GDBusProxy* proxy,
    GVariant* changed_properties,
    const gchar* const* invalidated_properties
  );
  void (* g_signal) (
    GDBusProxy* proxy,
    const gchar* sender_name,
    const gchar* signal_name,
    GVariant* parameters
  );
  
}

GDBusProxy 的类结构。

类成员
g_properties_changed: void (* g_properties_changed) ( GDBusProxy* proxy, GVariant* changed_properties, const gchar* const* invalidated_properties )

GDBusProxy::g-properties-changed 信号的信号类处理程序。

g_signal: void (* g_signal) ( GDBusProxy* proxy, const gchar* sender_name, const gchar* signal_name, GVariant* parameters )

GDBusProxy::g-signal 信号的信号类处理程序。

虚拟方法

Gio.DBusProxyClass.g_properties_changed

GDBusProxy::g-properties-changed 信号的信号类处理程序。

Gio.DBusProxyClass.g_signal

GDBusProxy::g-signal 信号的信号类处理程序。