Building a server is easy, simply connect to the specified bus, request a name and create an infinite loop where you poll for events. Example:

UDBus::Connection connection{};
UDBus::Error error{};
connection.bus_get(DBUS_BUS_SESSION, error);
if (error.is_set())
{
    LOG("Couldn't connect to the session bus");
    return 1;
}

auto result = connection.request_name("test.method.server", DBUS_NAME_FLAG_REPLACE_EXISTING, error);
if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
{
    LOG("Not primary owner of the name");
    return 2;
}

while (true)
{
    connection.read_write(0);
    auto message = connection.pop_message();

    if (!message.is_valid())
        continue;

    // Call any mesage parsing code here

    message.unref();
}