9 #ifndef RAD_SM_REQUESTOR_HPP
10 #define RAD_SM_REQUESTOR_HPP
12 #include <rad/anyEvent.hpp>
13 #include <rad/logger.hpp>
14 #include <rad/msgHandler.hpp>
15 #include <rad/msgRequestor.hpp>
16 #include <rad/smAdapter.hpp>
30 template <
typename TYPEREQ,
typename TYPEREP>
33 SMRequestor(
const std::string& endpoint,
const std::string& identity,
34 boost::asio::io_service& ios, SMAdapter& sm,
UniqueEvent&& ok_event,
38 size_t Send(
const TYPEREQ& payload,
const long timeout = 0);
46 void ReplyHandler(
const std::error_code& err_code, TYPEREP reply);
48 MsgRequestor<TYPEREQ, TYPEREP> m_msg_requestor;
53 TYPEREP m_reply_payload;
67 template <
typename TYPEREQ,
typename TYPEREP>
69 boost::asio::io_service& ios, SMAdapter& sm,
72 : m_msg_requestor(endpoint, identity, ios,
73 std::bind(&SMRequestor<TYPEREQ, TYPEREP>::ReplyHandler, this,
74 std::placeholders::_1, std::placeholders::_2)),
76 m_ok_event(std::move(ok_event)),
77 m_err_event(std::move(err_event)),
78 m_timeout_event(std::move(timeout_event)) {
85 template <
typename TYPEREQ,
typename TYPEREP>
97 template <
typename TYPEREQ,
typename TYPEREP>
100 return m_msg_requestor.Send(payload, timeout);
110 template <
typename TYPEREQ,
typename TYPEREP>
111 void SMRequestor<TYPEREQ, TYPEREP>::ReplyHandler(
const std::error_code& err_code, TYPEREP reply) {
115 LOG4CPLUS_DEBUG(
GetLogger(),
"Triggering timeout event.");
116 m_sm.ProcessEvent(*m_timeout_event);
118 LOG4CPLUS_DEBUG(
GetLogger(),
"Triggering OK reply event.");
119 m_reply_payload = reply;
121 m_sm.ProcessEvent(*m_ok_event);
128 template <
typename TYPEREQ,
typename TYPEREP>
131 return m_reply_payload;
136 #endif // RAD_SM_REQUESTOR_HPP
log4cplus::Logger & GetLogger()
Definition: logger.cpp:43
SMRequestor(const std::string &endpoint, const std::string &identity, boost::asio::io_service &ios, SMAdapter &sm, UniqueEvent &&ok_event, UniqueEvent &&err_event, UniqueEvent &&timeout_event)
Definition: smRequestor.hpp:68
SMRequestor & operator=(const SMRequestor &)=delete
size_t Send(const TYPEREQ &payload, const long timeout=0)
Definition: smRequestor.hpp:98
const TYPEREP & GetReplyPayload()
Definition: smRequestor.hpp:129
std::unique_ptr< AnyEvent > UniqueEvent
Definition: anyEvent.hpp:45
#define RAD_TRACE(logger)
Definition: logger.hpp:19
virtual ~SMRequestor()
Definition: smRequestor.hpp:86