ifw  0.0.1-dev
 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/socket.hpp>
15 #include <azmq/message.hpp>
16 
17 #include <boost/asio.hpp>
18 
19 #include <google/protobuf/message.h>
20 
21 #include <rad/Logger.hpp>
22 #include <rad/Assert.hpp>
23 #include <rad/Exceptions.hpp>
24 
25 namespace rad {
26 
31 
32 public:
33  MsgRequestorRaw(const std::string& endpoint,
34  const std::string& identity,
35  boost::asio::io_service& ios,
36  std::function<void(const std::error_code& errCode, const std::string& msgTypeId, const void* pData, const size_t dataSize)> replyHandler);
37  virtual ~MsgRequestorRaw();
38 
39  size_t Send(const std::string& payloadType, const std::string& payload, const long timeout = 0);
40 
41  MsgRequestorRaw(const MsgRequestorRaw&) = delete;
42  MsgRequestorRaw& operator= (const MsgRequestorRaw&) = delete;
43 
44 private:
45  void ReplyCallback(const boost::system::error_code& errCode, azmq::message& msg, size_t nbytes);
46  void TimeoutCallback(const boost::system::error_code& errCode);
47  bool InstallTimer(const long timeout /*msec*/);
48  void CancelTimer();
49 
50  std::string mEndpoint;
51  std::string mIdentity;
52  boost::asio::io_service& mIOS;
53  azmq::dealer_socket mSocket;
54  boost::asio::deadline_timer* mDeadlineTimer;
55 
56  std::function<void(const std::error_code& errCode, std::string const& msgTypeId, const void* pData, const size_t dataSize)> mReplyHandler;
57 };
58 
68  using handler_t = std::function<void(const std::error_code& /*errCode*/,
69  std::string const& /*msgTypeId*/,
70  const void* /*pData*/,
71  const size_t /*dataSize*/)>;
77  MsgRequestorRaw2(const std::string& endpoint,
78  const std::string& identity,
79  boost::asio::io_service& ios);
84 
91  size_t AsyncSendReceive(std::string const& payloadType,
92  std::string const& payload,
94  std::chrono::milliseconds const timeout = std::chrono::milliseconds(0));
107  size_t AsyncSend(std::string const& payloadType,
108  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 
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:48
size_t Send(const std::string &payloadType, const std::string &payload, const long timeout=0)
Definition: MsgRequestorRaw.cpp:62
std::function< void(const std::error_code &, std::string const &, const void *, const size_t)> handler_t
Definition: MsgRequestorRaw.hpp:71
optional string msg
Definition: topics.proto:7
MsgRequestorRaw(const std::string &endpoint, const std::string &identity, boost::asio::io_service &ios, std::function< void(const std::error_code &errCode, const std::string &msgTypeId, const void *pData, const size_t dataSize)> replyHandler)
Definition: MsgRequestorRaw.cpp:25
Definition: MsgRequestorRaw.hpp:30
optional bool timeout
Definition: requests.proto:13
size_t AsyncSend(std::string const &payloadType, std::string const &payload)
Definition: MsgRequestorRaw.cpp:276
size_t AsyncSendReceive(std::string const &payloadType, std::string const &payload, handler_t handler, std::chrono::milliseconds const timeout=std::chrono::milliseconds(0))
Definition: MsgRequestorRaw.cpp:266
void AsyncReceive(handler_t handler, std::chrono::milliseconds const timeout=std::chrono::milliseconds(0))
Definition: MsgRequestorRaw.cpp:294
~MsgRequestorRaw2()
Definition: MsgRequestorRaw.cpp:246
Definition: MsgRequestorRaw.hpp:67
def handler
Definition: test_dispatcher.py:11
optional int32 error_code
Definition: topics.proto:14
MsgRequestorRaw & operator=(const MsgRequestorRaw &)=delete
MsgRequestorRaw2(const std::string &endpoint, const std::string &identity, boost::asio::io_service &ios)
Definition: MsgRequestorRaw.cpp:222
std::string const
Definition: Test{{cookiecutter.device_name}}.cpp:209
void Cancel() noexcept
Definition: MsgRequestorRaw.cpp:256