DDS  ver. 3.4
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  {
136  class CSession
137  {
138  public:
139  enum class EAgentState
140  {
141  active = 0,
142  idle,
143  executing
144  };
145 
147  CSession();
149  ~CSession();
151  boost::uuids::uuid create();
154  void attach(const std::string& _sid);
157  void attach(const boost::uuids::uuid& _sid);
159  void shutdown();
161  void detach();
163  bool IsRunning() const;
166  boost::uuids::uuid getSessionID() const;
169  static std::string getDefaultSessionIDString();
172  static boost::uuids::uuid getDefaultSessionID();
181  void blockCurrentThread();
183  void unblockCurrentThread();
184 
187  template <class T>
188  void sendRequest(typename T::ptr_t _request);
189 
195  template <class Request_t>
196  void syncSendRequest(const typename Request_t::request_t& _requestData,
197  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
198  std::ostream* _out = nullptr);
199 
206  template <class Request_t>
207  void syncSendRequest(const typename Request_t::request_t& _requestData,
208  typename Request_t::response_t& _responseData,
209  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
210  std::ostream* _out = nullptr);
211 
218  template <class Request_t>
219  void syncSendRequest(const typename Request_t::request_t& _requestData,
220  typename Request_t::responseVector_t& _responseDataVector,
221  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
222  std::ostream* _out = nullptr);
223 
230  template <CSession::EAgentState _state>
231  void waitForNumAgents(size_t _numAgents,
232  const std::chrono::seconds& _timeout = std::chrono::seconds(0),
233  const std::chrono::milliseconds& _requestInterval = std::chrono::milliseconds(500),
234  std::ostream* _out = nullptr);
235 
236  private:
238  void subscribe();
241  bool isDDSAvailable() const;
242 
243  void notify(std::istream& _stream);
244 
245  // Map request ID to the actual request object
246  typedef std::map<requestID_t, boost::any> requests_t;
247 
248  template <class T>
249  void processRequest(requests_t::mapped_type _request,
250  const boost::property_tree::ptree::value_type& _child,
251  std::function<void(typename T::ptr_t)> _processResponseCallback);
252 
253  struct SImpl;
254  std::shared_ptr<SImpl> m_impl;
255 
256  std::mutex m_mtxRequests;
257  };
258  } // namespace tools_api
259 } // namespace dds
260 
261 #endif /* DDS_TOOLS_H */
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:397
void blockCurrentThread()
blockCurrentThread Blocks current thread.
Definition: Tools.cpp:222
~CSession()
A destructor.
Definition: Tools.cpp:74
static boost::uuids::uuid getDefaultSessionID()
Returns the default DDS session ID.
Definition: Tools.cpp:206
boost::uuids::uuid getSessionID() const
Returns DDS session ID.
Definition: Tools.cpp:196
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.
Definition: AgentConnectionManager.h:13
void attach(const std::string &_sid)
Attaches to an existing DDS session.
Definition: Tools.cpp:135
boost::uuids::uuid create()
Creates a new DDS session.
Definition: Tools.cpp:80
void unblockCurrentThread()
Stop DDS session.
Definition: Tools.cpp:233
CSession()
Constructor of a DDS Session class.
Definition: Tools.cpp:69
The main class of the Tools API. It represets a DDS session.
Definition: Tools.h:136
void sendRequest(typename T::ptr_t _request)
Sends the async request to DDS commander.
Definition: Tools.cpp:375
EAgentState
Definition: Tools.h:139
void shutdown()
Shutdown currently attached DDS session.
Definition: Tools.cpp:159
void detach()
Detach from the session without shutting it down.
Definition: Tools.cpp:185
bool IsRunning() const
Check if DDS session is running.
Definition: Tools.cpp:264
static std::string getDefaultSessionIDString()
Returns the default DDS session ID as a string.
Definition: Tools.cpp:201