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