refactor: improve Object vtable registration (#388)

This improves the D-Bus object API registration/unregistration by making it more flexible, more dynamic, closer to sd-bus API design but still on high abstraction level, and -- most importantly -- less error-prone since no `finishRegistration()` call is needed anymore.
This commit is contained in:
Stanislav Angelovič
2024-04-24 20:20:29 +02:00
parent e76d38c317
commit bdf313bc60
27 changed files with 1047 additions and 1103 deletions
@@ -21,14 +21,24 @@ public:
protected:
Planet1_adaptor(sdbus::IObject& object)
: object_(object)
: object_(&object)
{
object_.registerMethod("GetPopulation").onInterface(INTERFACE_NAME).withOutputParamNames("population").implementedAs([this](){ return this->GetPopulation(); });
object_.registerProperty("Name").onInterface(INTERFACE_NAME).withGetter([this](){ return this->Name(); });
}
Planet1_adaptor(const Planet1_adaptor&) = delete;
Planet1_adaptor& operator=(const Planet1_adaptor&) = delete;
Planet1_adaptor(Planet1_adaptor&&) = default;
Planet1_adaptor& operator=(Planet1_adaptor&&) = default;
~Planet1_adaptor() = default;
void registerAdaptor()
{
object_->addVTable( sdbus::registerMethod("GetPopulation").withOutputParamNames("population").implementedAs([this](){ return this->GetPopulation(); })
, sdbus::registerProperty("Name").withGetter([this](){ return this->Name(); })
).forInterface(INTERFACE_NAME);
}
private:
virtual uint64_t GetPopulation() = 0;
@@ -36,7 +46,7 @@ private:
virtual std::string Name() = 0;
private:
sdbus::IObject& object_;
sdbus::IObject* object_;
};
}}} // namespaces