10template <
typename RequestT>
12make_envelope_bytes(daphnemodules::MessageType type,
const RequestT& req)
14 daphnemodules::ControlEnvelope env;
16 env.set_payload(req.SerializeAsString());
19 env.SerializeToString(&bytes);
23template <
typename ResponseT>
25parse_response(
const zmq::message_t& msg, daphnemodules::MessageType expected)
27 daphnemodules::ControlEnvelope env;
28 env.ParseFromArray(msg.data(),
static_cast<int>(msg.size()));
30 if (env.type() != expected) {
31 throw std::runtime_error(
32 fmt::format(
"Unexpected envelope type {} (expected {})",
33 env.type(), expected));
36 rsp.ParseFromString(env.payload());
46 : socket_(ctx, zmq::socket_type::req)
48 socket_.set(zmq::sockopt::rcvtimeo,
static_cast<int>(timeout.count()));
49 socket_.set(zmq::sockopt::sndtimeo,
static_cast<int>(timeout.count()));
50 socket_.connect(fmt::format(
"tcp://{}:{}", ip, port));
55daphnemodules::ConfigureResponse
58 auto bytes = make_envelope_bytes(daphnemodules::CONFIGURE_FE, req);
59 socket_.send(zmq::buffer(bytes), zmq::send_flags::none);
62 socket_.recv(reply, zmq::recv_flags::none);
64 return parse_response<daphnemodules::ConfigureResponse>(
65 reply, daphnemodules::CONFIGURE_FE);
68daphnemodules::ConfigureCLKsResponse
70 const daphnemodules::ConfigureCLKsRequest& req)
72 auto bytes = make_envelope_bytes(daphnemodules::CONFIGURE_CLKS, req);
73 socket_.send(zmq::buffer(bytes), zmq::send_flags::none);
76 socket_.recv(reply, zmq::recv_flags::none);
78 return parse_response<daphnemodules::ConfigureCLKsResponse>(
79 reply, daphnemodules::CONFIGURE_CLKS);