sdbus-c++  0.8.1
High-level C++ D-Bus library based on systemd D-Bus implementation
IProxy.h
Go to the documentation of this file.
1 
27 #ifndef SDBUS_CXX_IPROXY_H_
28 #define SDBUS_CXX_IPROXY_H_
29 
31 #include <string>
32 #include <memory>
33 #include <functional>
34 #include <chrono>
35 
36 // Forward declarations
37 namespace sdbus {
38  class MethodCall;
39  class MethodReply;
40  class IConnection;
41 }
42 
43 namespace sdbus {
44 
45  /********************************************/
59  class IProxy
60  {
61  public:
62  virtual ~IProxy() = default;
63 
77  virtual MethodCall createMethodCall(const std::string& interfaceName, const std::string& methodName) = 0;
78 
97  virtual MethodReply callMethod(const MethodCall& message, uint64_t timeout = 0) = 0;
98 
102  template <typename _Rep, typename _Period>
103  MethodReply callMethod(const MethodCall& message, const std::chrono::duration<_Rep, _Period>& timeout);
104 
120  virtual void callMethod(const MethodCall& message, async_reply_handler asyncReplyCallback, uint64_t timeout = 0) = 0;
121 
125  template <typename _Rep, typename _Period>
126  void callMethod(const MethodCall& message, async_reply_handler asyncReplyCallback, const std::chrono::duration<_Rep, _Period>& timeout);
127 
137  virtual void registerSignalHandler( const std::string& interfaceName
138  , const std::string& signalName
139  , signal_handler signalHandler ) = 0;
140 
149  virtual void finishRegistration() = 0;
150 
160  virtual void unregister() = 0;
161 
181  [[nodiscard]] MethodInvoker callMethod(const std::string& methodName);
182 
205  [[nodiscard]] AsyncMethodInvoker callMethodAsync(const std::string& methodName);
206 
225  [[nodiscard]] SignalSubscriber uponSignal(const std::string& signalName);
226 
244  [[nodiscard]] PropertyGetter getProperty(const std::string& propertyName);
245 
263  [[nodiscard]] PropertySetter setProperty(const std::string& propertyName);
264  };
265 
266  // Out-of-line member definitions
267 
268  template <typename _Rep, typename _Period>
269  inline MethodReply IProxy::callMethod(const MethodCall& message, const std::chrono::duration<_Rep, _Period>& timeout)
270  {
271  auto microsecs = std::chrono::duration_cast<std::chrono::microseconds>(timeout);
272  return callMethod(message, microsecs.count());
273  }
274 
275  template <typename _Rep, typename _Period>
276  inline void IProxy::callMethod(const MethodCall& message, async_reply_handler asyncReplyCallback, const std::chrono::duration<_Rep, _Period>& timeout)
277  {
278  auto microsecs = std::chrono::duration_cast<std::chrono::microseconds>(timeout);
279  callMethod(message, std::move(asyncReplyCallback), microsecs.count());
280  }
281 
282  inline MethodInvoker IProxy::callMethod(const std::string& methodName)
283  {
284  return MethodInvoker(*this, methodName);
285  }
286 
287  inline AsyncMethodInvoker IProxy::callMethodAsync(const std::string& methodName)
288  {
289  return AsyncMethodInvoker(*this, methodName);
290  }
291 
292  inline SignalSubscriber IProxy::uponSignal(const std::string& signalName)
293  {
294  return SignalSubscriber(*this, signalName);
295  }
296 
297  inline PropertyGetter IProxy::getProperty(const std::string& propertyName)
298  {
299  return PropertyGetter(*this, propertyName);
300  }
301 
302  inline PropertySetter IProxy::setProperty(const std::string& propertyName)
303  {
304  return PropertySetter(*this, propertyName);
305  }
306 
326  [[nodiscard]] std::unique_ptr<sdbus::IProxy> createProxy( sdbus::IConnection& connection
327  , std::string destination
328  , std::string objectPath );
329 
349  [[nodiscard]] std::unique_ptr<sdbus::IProxy> createProxy( std::unique_ptr<sdbus::IConnection>&& connection
350  , std::string destination
351  , std::string objectPath );
352 
370  [[nodiscard]] std::unique_ptr<sdbus::IProxy> createProxy( std::string destination
371  , std::string objectPath );
372 
373 }
374 
376 
377 #endif /* SDBUS_CXX_IPROXY_H_ */
sdbus::IProxy
Definition: IProxy.h:59
sdbus::PropertyGetter
Definition: ConvenienceApiClasses.h:218
sdbus::IProxy::createMethodCall
virtual MethodCall createMethodCall(const std::string &interfaceName, const std::string &methodName)=0
Creates a method call message.
sdbus::MethodCall
Definition: Message.h:167
sdbus::SignalSubscriber
Definition: ConvenienceApiClasses.h:205
sdbus::IProxy::registerSignalHandler
virtual void registerSignalHandler(const std::string &interfaceName, const std::string &signalName, signal_handler signalHandler)=0
Registers a handler for the desired signal emitted by the proxied D-Bus object.
ConvenienceApiClasses.inl
sdbus::IProxy::uponSignal
SignalSubscriber uponSignal(const std::string &signalName)
Registers signal handler for a given signal of the proxied D-Bus object.
Definition: IProxy.h:292
sdbus::IProxy::setProperty
PropertySetter setProperty(const std::string &propertyName)
Sets value of a property of the proxied D-Bus object.
Definition: IProxy.h:302
sdbus::createProxy
std::unique_ptr< sdbus::IProxy > createProxy(sdbus::IConnection &connection, std::string destination, std::string objectPath)
Creates a proxy object for a specific remote D-Bus object.
sdbus::PropertySetter
Definition: ConvenienceApiClasses.h:229
sdbus::IProxy::getProperty
PropertyGetter getProperty(const std::string &propertyName)
Gets value of a property of the proxied D-Bus object.
Definition: IProxy.h:297
sdbus::IConnection
Definition: IConnection.h:47
sdbus::IProxy::finishRegistration
virtual void finishRegistration()=0
Finishes the registration of signal handlers.
sdbus::IProxy::unregister
virtual void unregister()=0
Unregisters proxy's signal handlers and stops receving replies to pending async calls.
sdbus::MethodInvoker
Definition: ConvenienceApiClasses.h:162
sdbus::MethodReply
Definition: Message.h:192
ConvenienceApiClasses.h
sdbus::IProxy::callMethodAsync
AsyncMethodInvoker callMethodAsync(const std::string &methodName)
Calls method on the proxied D-Bus object asynchronously.
Definition: IProxy.h:287
sdbus::IProxy::callMethod
virtual MethodReply callMethod(const MethodCall &message, uint64_t timeout=0)=0
Calls method on the proxied D-Bus object.
sdbus::AsyncMethodInvoker
Definition: ConvenienceApiClasses.h:187