sdbus-c++  1.1.0
High-level C++ D-Bus library based on systemd D-Bus implementation
IConnection.h
Go to the documentation of this file.
1 
27 #ifndef SDBUS_CXX_ICONNECTION_H_
28 #define SDBUS_CXX_ICONNECTION_H_
29 
30 #include <string>
31 #include <memory>
32 #include <chrono>
33 #include <cstdint>
34 #include <optional>
35 
36 namespace sdbus {
37 
38  /********************************************/
49  {
50  public:
64  struct PollData
65  {
69  int fd;
73  short int events;
74 
78  uint64_t timeout_usec;
79 
87  [[nodiscard]] std::chrono::microseconds getAbsoluteTimeout() const
88  {
89  return std::chrono::microseconds(timeout_usec);
90  }
91 
97  [[nodiscard]] std::optional<std::chrono::microseconds> getRelativeTimeout() const;
98 
105  [[nodiscard]] int getPollTimeout() const;
106  };
107 
108  virtual ~IConnection() = default;
109 
117  virtual void requestName(const std::string& name) = 0;
118 
126  virtual void releaseName(const std::string& name) = 0;
127 
133  virtual std::string getUniqueName() const = 0;
134 
143  virtual void enterEventLoop() = 0;
144 
151  virtual void enterEventLoopAsync() = 0;
152 
160  virtual void leaveEventLoop() = 0;
161 
171  virtual void addObjectManager(const std::string& objectPath) = 0;
172 
191  virtual PollData getEventLoopPollData() const = 0;
192 
211  virtual bool processPendingRequest() = 0;
212 
225  virtual void setMethodCallTimeout(uint64_t timeout) = 0;
226 
230  template <typename _Rep, typename _Period>
231  void setMethodCallTimeout(const std::chrono::duration<_Rep, _Period>& timeout);
232 
242  virtual uint64_t getMethodCallTimeout() const = 0;
243 
249  [[deprecated("This function has been replaced by enterEventLoop()")]] void enterProcessingLoop();
250 
256  [[deprecated("This function has been replaced by enterEventLoopAsync()")]] void enterProcessingLoopAsync();
257 
263  [[deprecated("This function has been replaced by leaveEventLoop()")]] void leaveProcessingLoop();
264 
270  [[deprecated("This function has been replaced by getEventLoopPollData()")]] PollData getProcessLoopPollData() const;
271  };
272 
273  template <typename _Rep, typename _Period>
274  inline void IConnection::setMethodCallTimeout(const std::chrono::duration<_Rep, _Period>& timeout)
275  {
276  auto microsecs = std::chrono::duration_cast<std::chrono::microseconds>(timeout);
277  return setMethodCallTimeout(microsecs.count());
278  }
279 
281  {
282  enterEventLoop();
283  }
284 
286  {
288  }
289 
291  {
292  leaveEventLoop();
293  }
294 
296  {
297  return getEventLoopPollData();
298  }
299 
307  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createConnection();
308 
317  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createConnection(const std::string& name);
318 
327  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createDefaultBusConnection();
328 
338  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createDefaultBusConnection(const std::string& name);
339 
347  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSystemBusConnection();
348 
357  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSystemBusConnection(const std::string& name);
358 
366  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSessionBusConnection();
367 
376  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSessionBusConnection(const std::string& name);
377 
386  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createRemoteSystemBusConnection(const std::string& host);
387 }
388 
389 #endif /* SDBUS_CXX_ICONNECTION_H_ */
std::unique_ptr< sdbus::IConnection > createRemoteSystemBusConnection(const std::string &host)
Creates/opens D-Bus system connection on a remote host using ssh.
std::unique_ptr< sdbus::IConnection > createDefaultBusConnection()
Creates/opens D-Bus user connection when in a user context, and a system connection,...
std::unique_ptr< sdbus::IConnection > createSystemBusConnection()
Creates/opens D-Bus system connection.
std::unique_ptr< sdbus::IConnection > createSessionBusConnection()
Creates/opens D-Bus session connection.
std::unique_ptr< sdbus::IConnection > createConnection()
Creates/opens D-Bus system connection.
Definition: IConnection.h:49
void leaveProcessingLoop()
Definition: IConnection.h:290
void enterProcessingLoop()
Enters I/O event loop on this bus connection.
Definition: IConnection.h:280
virtual void releaseName(const std::string &name)=0
Releases D-Bus name on the connection.
virtual void leaveEventLoop()=0
Leaves the I/O event loop running on this bus connection.
virtual bool processPendingRequest()=0
Process a pending request.
virtual void requestName(const std::string &name)=0
Requests D-Bus name on the connection.
virtual void addObjectManager(const std::string &objectPath)=0
Adds an ObjectManager at the specified D-Bus object path.
virtual std::string getUniqueName() const =0
Retrieve the unique name of a connection. E.g. ":1.xx".
virtual void setMethodCallTimeout(uint64_t timeout)=0
Sets general method call timeout.
virtual void enterEventLoop()=0
Enters I/O event loop on this bus connection.
virtual uint64_t getMethodCallTimeout() const =0
Gets general method call timeout.
virtual PollData getEventLoopPollData() const =0
Returns fd, I/O events and timeout data you can pass to poll.
virtual void enterEventLoopAsync()=0
Enters I/O event loop on this bus connection in a separate thread.
PollData getProcessLoopPollData() const
Definition: IConnection.h:295
void enterProcessingLoopAsync()
Definition: IConnection.h:285
Definition: IConnection.h:65
short int events
Definition: IConnection.h:73
uint64_t timeout_usec
Definition: IConnection.h:78
int fd
Definition: IConnection.h:69
std::optional< std::chrono::microseconds > getRelativeTimeout() const
std::chrono::microseconds getAbsoluteTimeout() const
Definition: IConnection.h:87