Как добавить объекты в сервис DBus из другого процесса / программы

Я создаю сервис 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 (правильный?).

1 ответ

Решение

Вы не можете, одно соединение с dbus == одно имя. Соединения обычно представляют собой unix-сокеты или абстрактные сокеты (в linux). Вам нужно будет прокси-вызовы от первого соединения, используя какой-либо RPC (или вызов dbus) к другим сервисам, а также отвечать на результаты первого соединения.

Другие вопросы по тегам