9 #ifndef RAD_MSG_REQUESTOR_HPP
10 #define RAD_MSG_REQUESTOR_HPP
12 #include <rad/assert.hpp>
13 #include <rad/errors.hpp>
14 #include <rad/exceptions.hpp>
15 #include <rad/logger.hpp>
16 #include <rad/msgRequestorRaw.hpp>
18 #include <azmq/message.hpp>
19 #include <azmq/socket.hpp>
21 #include <boost/asio.hpp>
23 #include <google/protobuf/message.h>
33 template <
typename TYPEREQ,
typename TYPEREP>
36 MsgRequestor(
const std::string& endpoint,
const std::string& identity,
37 boost::asio::io_service& ios,
38 std::function<
void(
const std::error_code&, TYPEREP)> reply_handler);
41 size_t Send(
const TYPEREQ& payload,
const long timeout = 0);
47 void Callback(
const std::error_code& err_code,
const std::string& msg_type_id,
const void* data,
48 const size_t data_size);
51 std::function<void(const std::error_code&, TYPEREP)> m_reply_handler;
62 template <
typename TYPEREQ,
typename TYPEREP>
64 const std::string& endpoint,
const std::string& identity, boost::asio::io_service& ios,
65 std::function<
void(
const std::error_code&, TYPEREP)> reply_handler)
66 : m_msg_requestor_raw(
67 endpoint, identity, ios,
68 std::bind(&
MsgRequestor::Callback, this, std::placeholders::_1, std::placeholders::_2,
69 std::placeholders::_3, std::placeholders::_4)),
70 m_reply_handler(reply_handler) {
77 template <
typename TYPEREQ,
typename TYPEREP>
89 template <
typename TYPEREQ,
typename TYPEREP>
98 std::string payload_type = payload.GetDescriptor()->full_name();
101 if (payload.SerializeToString(&str) ==
false) {
103 "Failed serializing to string payload type <" << payload_type <<
">");
106 return m_msg_requestor_raw.Send(payload_type, str, timeout);
117 template <
typename TYPEREQ,
typename TYPEREP>
119 const std::string& msg_type_id,
const void* data,
120 const size_t data_size) {
126 m_reply_handler(err_code, reply);
130 if (reply.ParseFromArray(data, data_size)) {
131 m_reply_handler({}, reply);
133 LOG4CPLUS_ERROR(
GetLogger(),
"Failed to parse reply type <" << msg_type_id <<
">");
145 template <
typename TREQ,
typename TREP>
149 using handler_t = std::function<void(const std::error_code&, reply_t)>;
161 boost::asio::io_service& ios)
162 : m_raw_requestor(endpoint, identity, ios) {}
181 std::chrono::milliseconds
const timeout = std::chrono::milliseconds(0)) {
184 std::string payload_type = payload.GetDescriptor()->full_name();
187 if (payload.SerializeToString(&str) ==
false) {
189 "Failed serializing to string payload type <" << payload_type <<
">");
194 [handler](std::error_code
const& ec, std::string
const& msg_type_id,
const void* p_data,
204 if (reply.ParseFromArray(p_data, size)) {
221 #endif // RAD_MSG_REQUESTOR_HPP
MsgRequestor & operator=(const MsgRequestor &)=delete
log4cplus::Logger & GetLogger()
Definition: logger.cpp:43
Definition: msgRequestor.hpp:146
size_t Send(const TYPEREQ &payload, const long timeout=0)
Definition: msgRequestor.hpp:90
std::function< void(const std::error_code &, reply_t)> handler_t
Definition: msgRequestor.hpp:149
MsgRequestor2 & operator=(const MsgRequestor2 &)=delete
#define RAD_ASSERTPTR(a)
Definition: assert.hpp:19
TREP reply_t
Definition: msgRequestor.hpp:148
TREQ request_t
Definition: msgRequestor.hpp:147
MsgRequestor(const std::string &endpoint, const std::string &identity, boost::asio::io_service &ios, std::function< void(const std::error_code &, TYPEREP)> reply_handler)
Definition: msgRequestor.hpp:63
Definition: msgRequestorRaw.hpp:30
virtual ~MsgRequestor2()
Definition: msgRequestor.hpp:163
MsgRequestor2(const std::string &endpoint, const std::string &identity, boost::asio::io_service &ios)
Definition: msgRequestor.hpp:160
size_t AsyncSendReceive(const request_t &payload, handler_t handler, std::chrono::milliseconds const timeout=std::chrono::milliseconds(0))
Definition: msgRequestor.hpp:179
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
#define RAD_TRACE(logger)
Definition: logger.hpp:19
Definition: msgRequestor.hpp:34
virtual ~MsgRequestor()
Definition: msgRequestor.hpp:78