Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > dbus отправка сигнала


Автор: null56 16.3.2011, 17:21
Всем привет
Возникла следующая ситуация: необходимо отправлять по dbus сигналы и принимать их из приложения
отправляющая сторона реализована на чистом dbus api, принимающая на glib
ссылки на api:
http://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html
http://dbus.freedesktop.org/doc/api/html/group__DBusMessage.html

меня больше интересует организация этого взаимодействия:
1) кто что должен зарегистрировать на dbus?
на стороне сервера что нужно сделать для того, чтобы была возможность посылать сигналы?
дело в том, что я оринтируюсь на готовый исходный код bind dns сервера, где у него есть небольшой фреймворк для работы с dbus, вот его суть
- создание подключения
Код

connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
dbus_connection_set_exit_on_disconnect(connection, FALSE);


2) если пункта 1 достаточно для отправки сигналов, тогда какие параметры я должен указывать в следующих функциях?
Код

DBusMessage *msg = dbus_message_new(DBUS_MESSAGE_TYPE_SIGNAL);
dbus_message_set_reply_serial(msg,reply_serial); // < что за номер? лдя подтверждения? нужен ли он мне для сигналов??
dbus_message_set_destination(msg, destination); // < что указывать в destination
dbus_message_set_path(msg, path); // < что за путь?
dbus_message_set_interface(msg,interface); // < что за интерфейс?
dbus_message_set_member(msg,member); // < что за member

если оринтироваться на описание фукнций, то
Цитата

reply_serial: the serial we're replying to - не ясно мне
destination: The destination is the name of another connection on the bus and may be either the unique name assigned by the bus to each connection, or a well-known name specified in -advance. - это получатель?
path: ... or the interface a signal is being emitted from (for DBUS_MESSAGE_TYPE_SIGNAL). - имя сигнала?
interface: Sets the interface member being invoked (DBUS_MESSAGE_TYPE_METHOD_CALL) or emitted (DBUS_MESSAGE_TYPE_SIGNAL). - для сигнала можно NULL?


в общем я изложил, что мне не ясно и если кто знает, как правильно организовать связь между отправителем сигнала и его получателем, отпишитесь пожалуйста.
клиентскую сторону пока показывать не буду, буду пробовать, но хотелось бы ответа с разъяснениями

заранее благодарен за помощь

Автор: null56 16.3.2011, 17:54
вот альтернативная функция
Код

DBUS_EXPORT DBusMessage * dbus_message_new_signal    (    const char *    path,
        const char *    interface,
        const char *    name     
    )            

Constructs a new message representing a signal emission.

Returns NULL if memory can't be allocated for the message. A signal is identified by its originating object path, interface, and the name of the signal.

Path, interface, and signal name must all be valid (the D-Bus specification defines the syntax of these fields).

Parameters:
     path    the path to the object emitting the signal
     interface    the interface the signal is emitted from
     name    name of the signal 

еще больше запутало... получается path - путь к приложению генератору сигнала, а interface тоже относится к отправителю?

Автор: null56 17.3.2011, 18:52
необходима регистрация на шине со стороны сервера + нельзя удалять прокси со стороны клиента и все работает
вот тут необходимое для сервера
http://www.matthew.ath.cx/misc/dbus

я забыл на серверной стороне регистрацию сервиса
Код

dbus_bus_request_name(conn, "test.method.server", DBUS_NAME_FLAG_REPLACE_EXISTING, &err);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)