rad  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
msgRequestorRaw.hpp
Go to the documentation of this file.
1 
9 #ifndef RAD_MSG_REQUESTOR_RAW_HPP
10 #define RAD_MSG_REQUESTOR_RAW_HPP
11 
12 #include <chrono>
13 
14 #include <azmq/message.hpp>
15 #include <azmq/socket.hpp>
16 
17 #include <boost/asio.hpp>
18 
19 #include <google/protobuf/message.h>
20 
21 #include <rad/assert.hpp>
22 #include <rad/exceptions.hpp>
23 #include <rad/logger.hpp>
24 
25 namespace rad {
26 
31  public:
33  const std::string& endpoint, const std::string& identity, boost::asio::io_service& ios,
34  std::function<void(const std::error_code& err_code, const std::string& msg_type_id,
35  const void* data, const size_t data_size)>
36  reply_handler);
37  virtual ~MsgRequestorRaw();
38 
39  size_t Send(const std::string& payload_type, const std::string& payload,
40  const long timeout = 0);
41 
42  MsgRequestorRaw(const MsgRequestorRaw&) = delete;
43  MsgRequestorRaw& operator=(const MsgRequestorRaw&) = delete;
44 
45  private:
46  void ReplyCallback(const boost::system::error_code& err_code, azmq::message& msg,
47  size_t nbytes);
48  void TimeoutCallback(const boost::system::error_code& err_code);
49  bool InstallTimer(const long timeout /*msec*/);
50  void CancelTimer();
51 
52  std::string m_endpoint;
53  std::string m_identity;
54  boost::asio::io_service& m_ios;
55  azmq::dealer_socket m_socket;
56  boost::asio::deadline_timer* m_deadline_timer;
57 
58  std::function<void(const std::error_code& err_code, std::string const& msg_type_id,
59  const void* data, const size_t data_size)>
60  m_reply_handler;
61 };
62 
72  using handler_t =
73  std::function<void(const std::error_code& /*err_code*/, std::string const& /*msg_type_id*/,
74  const void* /*data*/, const size_t /*data_size*/)>;
80  MsgRequestorRaw2(const std::string& endpoint, const std::string& identity,
81  boost::asio::io_service& io_ctx);
86 
93  size_t AsyncSendReceive(std::string const& payload_type, std::string const& payload,
95  std::chrono::milliseconds const timeout = std::chrono::milliseconds(0));
108  size_t AsyncSend(std::string const& payload_type, std::string const& payload);
120  void AsyncReceive(handler_t handler,
121  std::chrono::milliseconds const timeout = std::chrono::milliseconds(0));
125  void Cancel() noexcept;
126 
127  MsgRequestorRaw2(const MsgRequestorRaw2&) = delete;
128  MsgRequestorRaw2& operator=(const MsgRequestorRaw2&) = delete;
129  MsgRequestorRaw2(MsgRequestorRaw2&&) = default;
130  MsgRequestorRaw2& operator=(MsgRequestorRaw2&&) = default;
131 
132  private:
133  std::string m_endpoint;
134  std::string m_identity;
135  boost::asio::io_service& m_io_ctx;
136  azmq::dealer_socket m_socket;
137  handler_t m_handler;
138 };
139 
140 } // namespace rad
141 
142 #endif
virtual ~MsgRequestorRaw()
Definition: msgRequestorRaw.cpp:51
std::function< void(const std::error_code &, std::string const &, const void *, const size_t)> handler_t
Definition: msgRequestorRaw.hpp:74
Definition: msgRequestorRaw.hpp:30
void AsyncReceive(handler_t handler, std::chrono::milliseconds const timeout=std::chrono::milliseconds(0))
Definition: msgRequestorRaw.cpp:312
size_t AsyncSend(std::string const &payload_type, std::string const &payload)
Definition: msgRequestorRaw.cpp:294
~MsgRequestorRaw2()
Definition: msgRequestorRaw.cpp:261
size_t AsyncSendReceive(std::string const &payload_type, std::string const &payload, handler_t handler, std::chrono::milliseconds const timeout=std::chrono::milliseconds(0))
Definition: msgRequestorRaw.cpp:285
Definition: msgRequestorRaw.hpp:71
def handler
Definition: test_dispatcher.py:11
size_t Send(const std::string &payload_type, const std::string &payload, const long timeout=0)
Definition: msgRequestorRaw.cpp:65
MsgRequestorRaw & operator=(const MsgRequestorRaw &)=delete
MsgRequestorRaw2(const std::string &endpoint, const std::string &identity, boost::asio::io_service &io_ctx)
Definition: msgRequestorRaw.cpp:238
MsgRequestorRaw(const std::string &endpoint, const std::string &identity, boost::asio::io_service &ios, std::function< void(const std::error_code &err_code, const std::string &msg_type_id, const void *data, const size_t data_size)> reply_handler)
Definition: msgRequestorRaw.cpp:28
void Cancel() noexcept
Definition: msgRequestorRaw.cpp:274