12 #include <framework/logging/Logger.h>
47 template<
class AZMQMessage>
48 static void send(std::unique_ptr<zmq::socket_t>& socket, AZMQMessage message);
62 static unsigned int poll(
const std::vector<zmq::socket_t*>& socketList,
int timeout);
80 template<
int AZMQType>
81 std::unique_ptr<zmq::socket_t>
createSocket(
const std::string& socketAddress,
bool bind);
92 template<
int AZMQType>
93 std::unique_ptr<zmq::socket_t>
createSocket(
const std::string& socketAddress);
100 std::unique_ptr<zmq::context_t>
m_context;
106 template<
int AZMQType>
117 auto socket = std::make_unique<zmq::socket_t>(*
m_context, AZMQType);
119 if (AZMQType == ZMQ_DEALER) {
121 socket->setsockopt(ZMQ_IDENTITY, identity.c_str(), identity.length());
126 socket->setsockopt(ZMQ_LINGER, 0);
128 socket->bind(socketAddress.c_str());
130 socket->connect(socketAddress.c_str());
134 std::this_thread::sleep_for(std::chrono::milliseconds(100));
137 }
catch (zmq::error_t& error) {
138 B2FATAL(
"Creating the ZMQ socket for address " << socketAddress <<
" failed because of: " << error.what());
142 template<
int AZMQType>
147 if (socketAddress.find(
"*") != std::string::npos) {
148 return createSocket<AZMQType>(socketAddress,
true);
150 return createSocket<AZMQType>(socketAddress,
false);
154 template<
class AZMQMessage>
155 void ZMQParent::send(std::unique_ptr<zmq::socket_t>& socket, AZMQMessage message)
157 AZMQMessage::element_type::toSocket(std::move(message), socket);