DDS  ver. 3.6
Tools.h
Go to the documentation of this file.
1 // Copyright 2019 GSI, Inc. All rights reserved.
2 //
3 //
4 //
5 
6 #ifndef DDS_TOOLS_H
7 #define DDS_TOOLS_H
8 
9 // DDS
10 #include "ToolsProtocol.h"
11 // STD
12 #include <iostream>
13 #include <mutex>
14 #include <string>
15 // BOOST
16 #include <boost/property_tree/ptree.hpp>
17 #include <boost/uuid/uuid.hpp>
18 
19 namespace dds
20 {
21  namespace tools_api
22  {
190  class CSession
191  {
192  public:
193  enum class EAgentState
194  {
195  active = 0,
196  idle,
197  executing
198  };
199 
201  CSession();
203  ~CSession();
205  boost::uuids::uuid create();
208  void attach(const std::string& _sid);
211  void attach(const boost::uuids::uuid& _sid);
213  void shutdown();
215  void detach();
217  bool IsRunning() const;
220  boost::uuids::uuid getSessionID() const;
223  static std::string getDefaultSessionIDString();
226  static boost::uuids::uuid getDefaultSessionID();
228  static void setup();
229 
238  void blockCurrentThread();
240  void unblockCurrentThread();
241 
244  template <class T>
245  void sendRequest(typename T::ptr_t _request);
246 
252  template <class Request_t>
253  void syncSendRequest(const typename Request_t::request_t& _requestData,
254  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
255  std::ostream* _out = nullptr);
256 
263  template <class Request_t>
264  void syncSendRequest(const typename Request_t::request_t& _requestData,
265  typename Request_t::response_t& _responseData,
266  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
267  std::ostream* _out = nullptr);
268 
275  template <class Request_t>
276  void syncSendRequest(const typename Request_t::request_t& _requestData,
277  typename Request_t::responseVector_t& _responseDataVector,
278  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
279  std::ostream* _out = nullptr);
280 
287  template <CSession::EAgentState _state>
288  void waitForNumAgents(size_t _numAgents,
289  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
290  const std::chrono::milliseconds& _requestInterval = std::chrono::milliseconds(500),
291  std::ostream* _out = nullptr);
292 
302  std::string userDefaultsGetValueForKey(const std::string& _key) const noexcept;
303 
304  private:
306  void subscribe();
309  bool isDDSAvailable() const;
310 
311  void notify(std::istream& _stream);
312 
313  // Map request ID to the actual request object
314  typedef std::map<requestID_t, boost::any> requests_t;
315 
316  template <class T>
317  void processRequest(requests_t::mapped_type _request,
318  const boost::property_tree::ptree::value_type& _child,
319  std::function<void(typename T::ptr_t)> _processResponseCallback);
320 
321  struct SImpl;
322  std::shared_ptr<SImpl> m_impl;
323 
324  std::mutex m_mtxRequests;
325  };
326  } // namespace tools_api
327 } // namespace dds
328 
329 #endif /* DDS_TOOLS_H */
void sendRequest(typename T::ptr_t _request)
Sends the async request to DDS commander.
Definition: Tools.cpp:413
void syncSendRequest(const typename Request_t::request_t &_requestData, const std::chrono::seconds &_timeout=std::chrono::seconds(0), std::ostream *_out=nullptr)
Sends the sync request to DDS commander.
Definition: Tools.cpp:438
void blockCurrentThread()
blockCurrentThread Blocks current thread.
Definition: Tools.cpp:225
~CSession()
A destructor.
Definition: Tools.cpp:76
std::string userDefaultsGetValueForKey(const std::string &_key) const noexcept
This method returns a configuration value for a given configuration key. It uses the DDS configuratio...
Definition: Tools.cpp:596
static boost::uuids::uuid getDefaultSessionID()
Returns the default DDS session ID.
Definition: Tools.cpp:209
boost::uuids::uuid getSessionID() const
Returns DDS session ID.
Definition: Tools.cpp:199
void waitForNumAgents(size_t _numAgents, const std::chrono::seconds &_timeout=std::chrono::seconds(0), const std::chrono::milliseconds &_requestInterval=std::chrono::milliseconds(500), std::ostream *_out=nullptr)
Wait for the required number of agents with a certain state.
Miscellaneous functions and helpers are located here.
Definition: AgentConnectionManager.h:13
void attach(const std::string &_sid)
Attaches to an existing DDS session.
Definition: Tools.cpp:137
boost::uuids::uuid create()
Creates a new DDS session.
Definition: Tools.cpp:82
void unblockCurrentThread()
Stop DDS session.
Definition: Tools.cpp:236
static void setup()
Setups DDS environment.
Definition: Tools.cpp:259
CSession()
Constructor of a DDS Session class.
Definition: Tools.cpp:71
The main class of the Tools API. It represets a DDS session.
Definition: Tools.h:190
EAgentState
Definition: Tools.h:193
void shutdown()
Shutdown currently attached DDS session.
Definition: Tools.cpp:162
void detach()
Detach from the session without shutting it down.
Definition: Tools.cpp:188
bool IsRunning() const
Check if DDS session is running.
Definition: Tools.cpp:276
static std::string getDefaultSessionIDString()
Returns the default DDS session ID as a string.
Definition: Tools.cpp:204