Пишу сервер, который работает с dbus. У меня задача принять запрос на выполнение определённого метода из dbus. С обработкой и ответом проблем не возникает. Проблема с приёмом. Урезанный код сервера:
//gcc -Wall -o server.run server-lor.c `pkg-config --cflags --libs dbus-1`
#include <dbus/dbus.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
DBusMessage* msg;
DBusConnection* conn;
DBusError err;
dbus_error_init(&err);
conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
dbus_bus_request_name(conn, "andromeda.server", DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
dbus_bus_add_match(conn, "type='method_call',interface='andromeda.listener',member='method',path='/andromeda/methods',destination='andromeda.server'", NULL);
dbus_connection_flush(conn);
while (dbus_connection_read_write(conn, 0))
{
msg = dbus_connection_pop_message(conn);
if (NULL == msg)
{
sleep(1);
continue;
}
printf("got message\n");
dbus_message_unref(msg);
//break;
}
dbus_connection_unref(conn);
return 0;
}
dbus-send --session --type=method_call --dest=andromeda.server /andromeda/methods andromeda.listener.method