sdbus-c++ 2.1.0
High-level C++ D-Bus library based on systemd D-Bus implementation
Loading...
Searching...
No Matches
IObject.h
Go to the documentation of this file.
1
26
27#ifndef SDBUS_CXX_IOBJECT_H_
28#define SDBUS_CXX_IOBJECT_H_
29
31#include <sdbus-c++/Flags.h>
34
35#include <functional>
36#include <memory>
37#include <string>
38#include <vector>
39
40// Forward declarations
41namespace sdbus {
42 class Signal;
43 class IConnection;
44 class ObjectPath;
45}
46
47namespace sdbus {
48
49 /********************************************/
62 class IObject
63 {
64 public: // High-level, convenience API
65 virtual ~IObject() = default;
66
98 [[nodiscard]] VTableAdder addVTable(std::vector<VTableItem> vtable);
99
131 template < typename... VTableItems
132 , typename = std::enable_if_t<(is_one_of_variants_types<VTableItem, std::decay_t<VTableItems>> && ...)> >
133 [[nodiscard]] VTableAdder addVTable(VTableItems&&... items);
134
155 [[nodiscard]] SignalEmitter emitSignal(const SignalName& signalName);
156
160 [[nodiscard]] SignalEmitter emitSignal(const std::string& signalName);
161
165 [[nodiscard]] SignalEmitter emitSignal(const char* signalName);
166
175 virtual void emitPropertiesChangedSignal(const InterfaceName& interfaceName, const std::vector<PropertyName>& propNames) = 0;
176
180 virtual void emitPropertiesChangedSignal(const char* interfaceName, const std::vector<PropertyName>& propNames) = 0;
181
189 virtual void emitPropertiesChangedSignal(const InterfaceName& interfaceName) = 0;
190
194 virtual void emitPropertiesChangedSignal(const char* interfaceName) = 0;
195
208 virtual void emitInterfacesAddedSignal() = 0;
209
219 virtual void emitInterfacesAddedSignal(const std::vector<InterfaceName>& interfaces) = 0;
220
230 virtual void emitInterfacesRemovedSignal() = 0;
231
241 virtual void emitInterfacesRemovedSignal(const std::vector<InterfaceName>& interfaces) = 0;
242
255 virtual void addObjectManager() = 0;
256
271 [[nodiscard]] virtual Slot addObjectManager(return_slot_t) = 0;
272
278 [[nodiscard]] virtual sdbus::IConnection& getConnection() const = 0;
279
283 [[nodiscard]] virtual const ObjectPath& getObjectPath() const = 0;
284
298 [[nodiscard]] virtual Message getCurrentlyProcessedMessage() const = 0;
299
310 virtual void unregister() = 0;
311
312 public: // Lower-level, message-based API
337 template < typename... VTableItems
338 , typename = std::enable_if_t<(is_one_of_variants_types<VTableItem, std::decay_t<VTableItems>> && ...)> >
339 void addVTable(InterfaceName interfaceName, VTableItems&&... items);
340
364 virtual void addVTable(InterfaceName interfaceName, std::vector<VTableItem> vtable) = 0;
365
391 [[nodiscard]] virtual Slot addVTable(InterfaceName interfaceName, std::vector<VTableItem> vtable, return_slot_t) = 0;
392
406 [[nodiscard]] virtual Signal createSignal(const InterfaceName& interfaceName, const SignalName& signalName) const = 0;
407
417 virtual void emitSignal(const sdbus::Signal& message) = 0;
418
419 protected: // Internal API for efficiency reasons used by high-level API helper classes
420 friend SignalEmitter;
421
422 [[nodiscard]] virtual Signal createSignal(const char* interfaceName, const char* signalName) const = 0;
423 };
424
425 // Out-of-line member definitions
426
427 inline SignalEmitter IObject::emitSignal(const SignalName& signalName)
428 {
429 return SignalEmitter(*this, signalName);
430 }
431
432 inline SignalEmitter IObject::emitSignal(const std::string& signalName)
433 {
434 return SignalEmitter(*this, signalName.c_str());
435 }
436
437 inline SignalEmitter IObject::emitSignal(const char* signalName)
438 {
439 return SignalEmitter(*this, signalName);
440 }
441
442 template <typename... VTableItems, typename>
443 void IObject::addVTable(InterfaceName interfaceName, VTableItems&&... items)
444 {
445 addVTable(std::move(interfaceName), {std::forward<VTableItems>(items)...});
446 }
447
448 template <typename... VTableItems, typename>
449 VTableAdder IObject::addVTable(VTableItems&&... items)
450 {
451 return addVTable(std::vector<VTableItem>{std::forward<VTableItems>(items)...});
452 }
453
454 inline VTableAdder IObject::addVTable(std::vector<VTableItem> vtable)
455 {
456 return VTableAdder(*this, std::move(vtable));
457 }
458
477 [[nodiscard]] std::unique_ptr<sdbus::IObject> createObject(sdbus::IConnection& connection, ObjectPath objectPath);
478
479}
480
483
484#endif /* SDBUS_CXX_IOBJECT_H_ */
std::unique_ptr< sdbus::IObject > createObject(sdbus::IConnection &connection, ObjectPath objectPath)
Creates instance representing a D-Bus object.
Definition IConnection.h:61
Definition IObject.h:63
virtual void emitPropertiesChangedSignal(const char *interfaceName, const std::vector< PropertyName > &propNames)=0
Emits PropertyChanged signal for specified properties under a given interface of this object path.
virtual Slot addObjectManager(return_slot_t)=0
Adds an ObjectManager interface at the path of this D-Bus object.
VTableAdder addVTable(std::vector< VTableItem > vtable)
Adds a declaration of methods, properties and signals of the object at a given interface.
Definition IObject.h:454
virtual Message getCurrentlyProcessedMessage() const =0
Provides access to the currently processed D-Bus message.
virtual Slot addVTable(InterfaceName interfaceName, std::vector< VTableItem > vtable, return_slot_t)=0
Adds a declaration of methods, properties and signals of the object at a given interface.
virtual void emitInterfacesRemovedSignal()=0
Emits InterfacesRemoved signal on this object path.
virtual void emitPropertiesChangedSignal(const InterfaceName &interfaceName)=0
Emits PropertyChanged signal for all properties on a given interface of this object path.
virtual const ObjectPath & getObjectPath() const =0
Returns object path of the underlying DBus object.
virtual void emitSignal(const sdbus::Signal &message)=0
Emits signal for this object path.
virtual Signal createSignal(const InterfaceName &interfaceName, const SignalName &signalName) const =0
Creates a signal message.
SignalEmitter emitSignal(const SignalName &signalName)
Emits signal on D-Bus.
Definition IObject.h:427
virtual void addVTable(InterfaceName interfaceName, std::vector< VTableItem > vtable)=0
Adds a declaration of methods, properties and signals of the object at a given interface.
virtual void emitInterfacesRemovedSignal(const std::vector< InterfaceName > &interfaces)=0
Emits InterfacesRemoved signal on this object path.
virtual void emitInterfacesAddedSignal(const std::vector< InterfaceName > &interfaces)=0
Emits InterfacesAdded signal on this object path.
virtual void emitPropertiesChangedSignal(const InterfaceName &interfaceName, const std::vector< PropertyName > &propNames)=0
Emits PropertyChanged signal for specified properties under a given interface of this object path.
virtual void addObjectManager()=0
Adds an ObjectManager interface at the path of this D-Bus object.
virtual sdbus::IConnection & getConnection() const =0
Provides D-Bus connection used by the object.
virtual void emitInterfacesAddedSignal()=0
Emits InterfacesAdded signal on this object path.
virtual void emitPropertiesChangedSignal(const char *interfaceName)=0
Emits PropertyChanged signal for all properties on a given interface of this object path.
virtual void unregister()=0
Unregisters object's API and removes object from the bus.
Definition Types.h:238
Definition Message.h:81
Definition Types.h:195
Definition Message.h:302
Definition ConvenienceApiClasses.h:54
Definition TypeTraits.h:88