9#ifndef RAD_MSG_REQUESTOR_HPP
10#define RAD_MSG_REQUESTOR_HPP
18#include <azmq/message.hpp>
19#include <azmq/socket.hpp>
21#include <boost/asio.hpp>
23#include <google/protobuf/message.h>
33template <
typename TYPEREQ,
typename TYPEREP>
36 MsgRequestor(
const std::string& endpoint,
const std::string& identity,
37 boost::asio::io_context& 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;
62template <
typename TYPEREQ,
typename TYPEREP>
64 const std::string& endpoint,
const std::string& identity, boost::asio::io_context& ios,
65 std::function<
void(
const std::error_code&, TYPEREP)> reply_handler)
66 : m_msg_requestor_raw(
67 endpoint, identity, ios,
69 std::placeholders::_3,
std::placeholders::_4)),
70 m_reply_handler(reply_handler) {
77template <
typename TYPEREQ,
typename TYPEREP>
89template <
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);
117template <
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 <<
">");
145template <
typename TREQ,
typename TREP>
161 boost::asio::io_context& 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)) {
#define RAD_ASSERTPTR(a)
Definition assert.hpp:19
Definition msgRequestorRaw.hpp:30
Definition msgRequestor.hpp:34
MsgRequestor(const std::string &endpoint, const std::string &identity, boost::asio::io_context &ios, std::function< void(const std::error_code &, TYPEREP)> reply_handler)
Definition msgRequestor.hpp:63
MsgRequestor(const MsgRequestor &)=delete
size_t Send(const TYPEREQ &payload, const long timeout=0)
Definition msgRequestor.hpp:90
virtual ~MsgRequestor()
Definition msgRequestor.hpp:78
MsgRequestor & operator=(const MsgRequestor &)=delete
#define RAD_TRACE(logger)
Definition logger.hpp:21
Exception classes header file.
MsgRequestorRaw class header file.
Definition actionsApp.cpp:23
log4cplus::Logger & GetLogger()
Definition logger.cpp:72
Definition msgRequestor.hpp:146
size_t AsyncSendReceive(const request_t &payload, handler_t handler, std::chrono::milliseconds const timeout=std::chrono::milliseconds(0))
Definition msgRequestor.hpp:179
MsgRequestor2(MsgRequestor2 &&)=default
MsgRequestor2(const MsgRequestor2 &)=delete
std::function< void(const std::error_code &, reply_t)> handler_t
Definition msgRequestor.hpp:149
TREQ request_t
Definition msgRequestor.hpp:147
TREP reply_t
Definition msgRequestor.hpp:148
MsgRequestor2(const std::string &endpoint, const std::string &identity, boost::asio::io_context &ios)
Definition msgRequestor.hpp:160
MsgRequestor2 & operator=(const MsgRequestor2 &)=delete
virtual ~MsgRequestor2()
Definition msgRequestor.hpp:163
MsgRequestor2 & operator=(MsgRequestor2 &&)=default
Definition msgRequestorRaw.hpp:71
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:287