Я создаю сервис DBus и добавляю к нему объекты.
QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerService(serviceName); // name, e.g. "foo"QDBusConnection::sessionBus().registerObject(path, object, myoptions);
Хорошо, я могу видеть мои объекты в разделе «Сервис» на мониторе DBus. Теперь я хочу добавить больше объектов, но из другой программы (которая связана, но независима).
Там connection.registerService(serviceName);
не удается, так как сервис уже существует. Как я смогу зарегистрировать больше объектов под тем же именем сервиса?
Предыстория: у меня есть клиенты, потребляющие услуги. Они делают не знать, кто предоставляет услуги, но только название службы. Поэтому они всегда ссылаются на одно и то же имя сервиса. Но несколько провайдеров должны предоставить услугу.
Я пытался не использовать имя службы (пустая строка, просто полагаясь на путь объекта). Но прокси на основе
QDBusAbstractInterface(serviceName, path, interfaceName.toUtf8().constData(), connection, parent)
не похоже на работу с пустым («») serviceName
(правильный?).
вы не можете, одно соединение с dbus == одно имя. Соединения обычно представляют собой unix-сокеты или абстрактные сокеты (в linux). Вам нужно будет прокси-вызовы от первого соединения, используя какой-либо RPC (или вызов dbus) к другим сервисам, а также отвечать на результаты первого соединения.