Add getConnection() method to IObject so we ask Object about its connection

This commit is contained in:
Stanislav Angelovic
2019-04-04 20:39:03 +02:00
parent a919058d13
commit 94fd3c88d8
4 changed files with 16 additions and 2 deletions

View File

@@ -173,6 +173,13 @@ namespace sdbus {
*/ */
virtual void emitSignal(const sdbus::Signal& message) = 0; virtual void emitSignal(const sdbus::Signal& message) = 0;
/*!
* @brief Provides D-Bus connection used by the object
*
* @return Reference to the D-Bus connection
*/
virtual sdbus::IConnection& getConnection() const = 0;
/*! /*!
* @brief Registers method that the object will provide on D-Bus * @brief Registers method that the object will provide on D-Bus
* *

View File

@@ -74,7 +74,7 @@ namespace sdbus {
***********************************************/ ***********************************************/
template <typename... _Interfaces> template <typename... _Interfaces>
class Interfaces class Interfaces
: private ObjectHolder<IObject> : protected ObjectHolder<IObject>
, public _Interfaces... , public _Interfaces...
{ {
public: public:
@@ -96,7 +96,7 @@ namespace sdbus {
***********************************************/ ***********************************************/
template <typename... _Interfaces> template <typename... _Interfaces>
class ProxyInterfaces class ProxyInterfaces
: private ObjectHolder<IObjectProxy> : protected ObjectHolder<IObjectProxy>
, public _Interfaces... , public _Interfaces...
{ {
public: public:

View File

@@ -130,6 +130,11 @@ void Object::emitSignal(const sdbus::Signal& message)
message.send(); message.send();
} }
sdbus::IConnection& Object::getConnection() const
{
return dynamic_cast<sdbus::IConnection&>(connection_);
}
const std::vector<sd_bus_vtable>& Object::createInterfaceVTable(InterfaceData& interfaceData) const std::vector<sd_bus_vtable>& Object::createInterfaceVTable(InterfaceData& interfaceData)
{ {
auto& vtable = interfaceData.vtable_; auto& vtable = interfaceData.vtable_;

View File

@@ -77,6 +77,8 @@ namespace internal {
sdbus::Signal createSignal(const std::string& interfaceName, const std::string& signalName) override; sdbus::Signal createSignal(const std::string& interfaceName, const std::string& signalName) override;
void emitSignal(const sdbus::Signal& message) override; void emitSignal(const sdbus::Signal& message) override;
sdbus::IConnection& getConnection() const override;
private: private:
using InterfaceName = std::string; using InterfaceName = std::string;
struct InterfaceData struct InterfaceData