类
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 服务,并且在调用之间可能会启动和停止名称所有者,则 GDBusProxy
的 GDBusProxy:g-name-owner
跟踪会导致代理在首次重启后放弃来自服务的信号和属性更改。在与无状态 D-Bus 服务交互时,请勿使用 GDBusProxy
— 使用直接 D-Bus 方法调用和信号连接。
通用 GDBusProxy::g-properties-changed
和 GDBusProxy::g-signal
信号使用起来不太方便。因此,使用代理的推荐方法是对 GDBusProxy
进行子类化,并在派生类中提供更自然的属性和信号。此 示例 说明了如何使用 gdbus-codegen
工具轻松实现此操作。
可以从多个线程使用 GDBusProxy
实例,但请注意所有信号(例如 GDBusProxy::g-signal
、GDBusProxy::g-properties-changed
和 GObject::notify
)都将在此实例构造所在的线程的线程默认主上下文中发出(请参阅 g_main_context_push_thread_default()
)。
可以在 gdbus-example-watch-proxy.c
中找到有关如何使用 well-known 名称的代理的示例。
自 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_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_default_timeout
获取超时时间,如果在 `g_dbus_proxy_call()` 和 `g_dbus_proxy_call_sync()` 函数中将 -1(指定默认超时时间)作为 `timeout_msec` 传递,则将使用该超时时间。
自:2.26
g_dbus_proxy_get_interface_info
如果存在,返回 `GDBusInterfaceInfo`,该信息指定 `proxy` 符合的接口。有关更多详细信息,请参阅 `GDBusProxy:g-interface-info` 属性。
自:2.26
g_dbus_proxy_get_name_owner
拥有 `proxy` 所从属名称的唯一名称,或者,如果当前没有人拥有该名称,则为 `NULL`。你可以连接到 `GObject::notify` 信号,以跟踪 `GDBusProxy:g-name-owner` 属性的变更。
自: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
从 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)
属性
Gio.DBusProxy:g-bus-type
如果此属性不为 `G_BUS_TYPE_NONE`,则 `GDBusProxy:g-connection` 必须为 `NULL`,并且将通过使用此属性的值调用 `g_bus_get()` 来将其设置为获取的 `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-interface-info
确保与此代理的交互符合给定接口。这主要用于确保忽略从其他对等方收到的格式错误的数据。给定的 GDBusInterfaceInfo
被称为“预期接口”。
自:2.26
Gio.DBusProxy:g-name-owner
拥有 GDBusProxy:g-name
或 NULL
的唯一名称(如果当前没有人拥有该名称)。您可以连接到 GObject::notify
信号以跟踪此属性的更改。
自:2.26
信号
Gio.DBusProxy::g-properties-changed
当 proxy
上的一个或多个 D-Bus 属性更改时发出。当此信号触发时,本地高速缓存已经更新。请注意,changed_properties
和 invalidated_properties
都保证永远不会为 NULL
(尽管可能两者都为空)。
自: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
信号的信号类处理程序。