35
static void unregister_object_path(DBusConnection*, void* data)
37
delete static_cast<VTable*>(data);
40
static DBusHandlerResult on_new_message(
45
auto thiz = static_cast<VTable*>(data);
46
auto instance = thiz->object.lock();
47
if (instance && instance->on_new_message(
48
core::dbus::Message::from_raw_message(
50
return DBUS_HANDLER_RESULT_HANDLED;
52
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
55
std::weak_ptr<core::dbus::Object> object;
58
33
struct FunctionTable
60
35
static void unregister_object_path(DBusConnection*, void* data)
358
void Bus::register_fallback_object_function_table(
359
const types::ObjectPath& path,
360
const Bus::ObjectFunctionTable& table)
362
auto vtable = new DBusObjectPathVTable
364
FunctionTable::unregister_object_path,
365
FunctionTable::on_new_message,
373
auto result = dbus_connection_try_register_fallback(
375
path.as_string().c_str(),
377
new FunctionTable{table},
378
std::addressof(e.raw()));
383
throw std::runtime_error(e.print());
383
387
void Bus::unregister_object_function_table(
384
388
const types::ObjectPath& path)
388
392
path.as_string().c_str());
391
void Bus::register_object_for_path(
392
const types::ObjectPath& path,
393
const std::shared_ptr<Object>& object)
395
auto vtable = new DBusObjectPathVTable
397
VTable::unregister_object_path,
398
VTable::on_new_message,
406
auto result = dbus_connection_try_register_object_path(
408
path.as_string().c_str(),
411
std::addressof(e.raw()));
416
throw std::runtime_error(e.print());
420
void Bus::register_fallback_object_for_path(
421
const types::ObjectPath& path,
422
const std::shared_ptr<Object>& object)
424
auto vtable = new DBusObjectPathVTable
426
VTable::unregister_object_path,
427
VTable::on_new_message,
435
auto result = dbus_connection_try_register_fallback(
437
path.as_string().c_str(),
440
std::addressof(e.raw()));
445
throw std::runtime_error(e.print());
449
void Bus::unregister_object_path(
450
const types::ObjectPath& path)
452
dbus_connection_unregister_object_path(
454
path.as_string().c_str());
457
395
Bus::SignalRouter& Bus::access_signal_router()
459
397
return d->signal_router;