如何从另一个进程/程序向 DBus 服务添加对象
How to add objects to DBus service from another process / program
我创建一个 DBus 服务并向其添加对象。
QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerService(serviceName); // name, e.g. "foo"
QDBusConnection::sessionBus().registerObject(path, object, myoptions);
很好,我可以在 DBus 监视器的 "service" 下看到我的对象。现在我想添加更多对象,但是来自另一个程序(相关但独立)。
connection.registerService(serviceName);
失败,因为该服务已经存在。 如何才能在同一服务名称下注册更多对象?
背景:我有客户使用这些服务。他们不知道谁提供服务,但只知道服务名称。所以他们总是引用相同的服务名称。但是应该有几个供应商提供服务。
我试过不使用服务名称(空字符串,仅依赖于对象路径)。但是基于
的代理
QDBusAbstractInterface(serviceName, path, interfaceName.toUtf8().constData(), connection, parent)
似乎不能使用空 ("") serviceName
(正确?)。
你不能,一个到 dbus 的连接 == 一个名称。连接通常是 unix 套接字或抽象套接字(在 linux 上)。您需要使用某种类型或 RPC(或 dbus 调用)将第一次连接的调用代理到其他服务,并响应第一次连接的结果。
我创建一个 DBus 服务并向其添加对象。
QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerService(serviceName); // name, e.g. "foo"
QDBusConnection::sessionBus().registerObject(path, object, myoptions);
很好,我可以在 DBus 监视器的 "service" 下看到我的对象。现在我想添加更多对象,但是来自另一个程序(相关但独立)。
connection.registerService(serviceName);
失败,因为该服务已经存在。 如何才能在同一服务名称下注册更多对象?
背景:我有客户使用这些服务。他们不知道谁提供服务,但只知道服务名称。所以他们总是引用相同的服务名称。但是应该有几个供应商提供服务。
我试过不使用服务名称(空字符串,仅依赖于对象路径)。但是基于
的代理QDBusAbstractInterface(serviceName, path, interfaceName.toUtf8().constData(), connection, parent)
似乎不能使用空 ("") serviceName
(正确?)。
你不能,一个到 dbus 的连接 == 一个名称。连接通常是 unix 套接字或抽象套接字(在 linux 上)。您需要使用某种类型或 RPC(或 dbus 调用)将第一次连接的调用代理到其他服务,并响应第一次连接的结果。