Skip to content

I'm not getting a signal #447

Description

@khromenokroman

used lib 1.4.0

busctl

‣ Type=signal  Endian=l  Flags=1  Version=1 Cookie=2950  Timestamp="Fri 2024-07-12 05:12:32.158034 UTC"
  Sender=:1.67774  Path=/ru/test/management/converter  Interface=ru.test.management.converter.modules  Member=config_changed
  UniqueName=:1.67774
  MESSAGE "" {
  };

run

#include <iostream>
#include <sdbus-c++/sdbus-c++.h>

int main() {
    std::cout << "Start prog" << std::endl;

    auto converter_signal_proxy = sdbus::createProxy("ru.test.management",
                                                     "/ru/test/management/converter");
    converter_signal_proxy->uponSignal("config_changed").onInterface("ru.test.management.converter.modules")
            .call([]() {
                std::cout << "Catch signal converter" << std::endl;
            });

    sleep(15);

    std::cout << "End prog" << std::endl;

    return 0;
}

output

Start prog
End prog

the monitor shows that there is a signal, but I can't get it with my application, what am I doing wrong

I did it according to the documentation https://github.com/Kistler-Group/sdbus-cpp/blob/master/docs/using-sdbus-c++.md

Client side

neeed help :))

but if you do it like this, I get a signal

#include <dbus/dbus.h>
#include <cstdio>

[[noreturn]] void listen_to_signals(DBusConnection* conn) {
    dbus_bus_add_match(conn, "type='signal',interface='ru.test.management.converter.modules'", nullptr);
    dbus_connection_flush(conn);

    while(true) {
        DBusMessage* msg;
        dbus_connection_read_write(conn, 0);
        msg = dbus_connection_pop_message(conn);

        if (msg != nullptr) {
            if (dbus_message_is_signal(msg, "ru.test.management.converter.modules", "config_changed")) {
                printf("Received Signal\n");
            }
            dbus_message_unref(msg);
        }
    }
}

int main() {
    DBusError err;
    DBusConnection* conn;

    dbus_error_init(&err);

    conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
    if (dbus_error_is_set(&err)) {
        fprintf(stderr, "Connection Error (%s)\n", err.message);
        dbus_error_free(&err);
        return 1;
    }

    listen_to_signals(conn);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions