rad 6.2.0
Loading...
Searching...
No Matches
msgReplier.hpp
Go to the documentation of this file.
1
9#ifndef RAD_MSG_REPLIER_HPP
10#define RAD_MSG_REPLIER_HPP
11
12#include <rad/assert.hpp>
13#include <rad/logger.hpp>
14#include <rad/msgHandler.hpp>
15
16#include <azmq/message.hpp>
17#include <azmq/socket.hpp>
18
19#include <boost/asio.hpp>
20
21#include <map>
22
23namespace rad {
24
29 public:
31 std::function<void(const std::string&, const std::string&, const void*, size_t)>;
32 using MsgHandlerMap_t = std::unordered_map<std::string, MsgHandler_t>;
33
34 MsgReplier(const std::string& endpoint, boost::asio::io_context& ios,
35 std::unique_ptr<MsgHandler>&& fallback_handler);
36 virtual ~MsgReplier();
37 MsgReplier(MsgReplier&&) = default;
38
39 void Start();
40 void Stop();
41
42 void AddMsgHandler(const std::string& request_name, MsgHandler_t handler);
43
44 size_t Send(const std::string& identity, const std::string& reply_type,
45 const std::string& reply_payload);
46
47 template <typename REPLY>
48 size_t Send(const std::string& identity, const REPLY& reply_payload);
49
50 MsgReplier(const MsgReplier&) = delete;
51 MsgReplier& operator=(const MsgReplier&) = delete;
52
53 private:
54 std::string m_endpoint;
55 boost::asio::io_context& m_ios;
56 azmq::router_socket m_socket;
57 std::unique_ptr<MsgHandler> m_fallback_handler;
58 MsgHandlerMap_t m_handlers_map;
59
60 void Register();
61 void Callback(boost::system::error_code const& error_code, azmq::message& msg, size_t nbytes);
62};
63
64template <typename TYPEREP>
65size_t MsgReplier::Send(const std::string& identity, const TYPEREP& reply_payload) {
67
68 RAD_ASSERTPTR(reply_payload.GetDescriptor());
69 std::string reply_type = reply_payload.GetDescriptor()->full_name();
70
71 std::string str;
72 if (reply_payload.SerializeToString(&str) == false) {
73 LOG4CPLUS_ERROR(GetLogger(),
74 "Failed serializing to string payload type <" << reply_type << ">");
75 return 0;
76 }
77
78 return Send(identity, reply_type, str);
79}
80
81} // namespace rad
82
83#endif
Assert header file.
#define RAD_ASSERTPTR(a)
Definition assert.hpp:19
Definition msgReplier.hpp:28
MsgReplier & operator=(const MsgReplier &)=delete
virtual ~MsgReplier()
Definition msgReplier.cpp:45
std::function< void(const std::string &, const std::string &, const void *, size_t)> MsgHandler_t
Definition msgReplier.hpp:30
size_t Send(const std::string &identity, const std::string &reply_type, const std::string &reply_payload)
Definition msgReplier.cpp:58
MsgReplier(const MsgReplier &)=delete
size_t Send(const std::string &identity, const REPLY &reply_payload)
MsgReplier(MsgReplier &&)=default
std::unordered_map< std::string, MsgHandler_t > MsgHandlerMap_t
Definition msgReplier.hpp:32
void Stop()
Definition msgReplier.cpp:83
MsgReplier(const std::string &endpoint, boost::asio::io_context &ios, std::unique_ptr< MsgHandler > &&fallback_handler)
Definition msgReplier.cpp:27
void Start()
Definition msgReplier.cpp:75
void AddMsgHandler(const std::string &request_name, MsgHandler_t handler)
Definition msgReplier.cpp:99
Logger class.
#define RAD_TRACE(logger)
Definition logger.hpp:21
public header file.
Definition actionsApp.cpp:23
log4cplus::Logger & GetLogger()
Definition logger.cpp:72