DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
daphnemodules
src
zmqclient
ControlClient.cpp
Go to the documentation of this file.
1
#include "daphnemodules/zmqclient/ControlClient.hpp"
2
#include <fmt/core.h>
// or ers::logging
3
4
namespace
daphne::zmq
{
5
6
// ----------------------------------------------------------------------
7
// helper – builds envelope and serialises
8
// ----------------------------------------------------------------------
9
namespace
{
10
template
<
typename
RequestT>
11
std::string
12
make_envelope_bytes(daphnemodules::MessageType
type
,
const
RequestT& req)
13
{
14
daphnemodules::ControlEnvelope env;
15
env.set_type(
type
);
16
env.set_payload(req.SerializeAsString());
17
18
std::string bytes;
19
env.SerializeToString(&bytes);
20
return
bytes;
// NRVO / move-elided
21
}
22
23
template
<
typename
ResponseT>
24
ResponseT
25
parse_response(
const
zmq::message_t& msg, daphnemodules::MessageType expected)
26
{
27
daphnemodules::ControlEnvelope env;
28
env.ParseFromArray(msg.data(),
static_cast<
int
>
(msg.size()));
29
30
if
(env.type() != expected) {
31
throw
std::runtime_error(fmt::format(
"Unexpected envelope type {} (expected {})"
, env.type(), expected));
32
}
33
ResponseT rsp;
34
rsp.ParseFromString(env.payload());
35
return
rsp;
36
}
37
}
// namespace
38
// ----------------------------------------------------------------------
39
40
ControlClient::ControlClient
(zmq::context_t& ctx, std::string_view ip, uint16_t port,
Milliseconds
timeout)
41
:
socket_
(ctx,
zmq
::socket_type::req)
42
{
43
socket_
.set(zmq::sockopt::rcvtimeo,
static_cast<
int
>
(timeout.count()));
44
socket_
.set(zmq::sockopt::sndtimeo,
static_cast<
int
>
(timeout.count()));
45
socket_
.connect(fmt::format(
"tcp://{}:{}"
, ip, port));
46
}
47
48
// ---------------------- API -------------------------------------------
49
50
daphnemodules::ConfigureResponse
51
ControlClient::configure
(
const
daphnemodules::ConfigureRequest& req)
52
{
53
auto
bytes = make_envelope_bytes(daphnemodules::CONFIGURE_FE, req);
54
socket_
.send(zmq::buffer(bytes), zmq::send_flags::none);
55
56
zmq::message_t reply;
57
socket_
.recv(reply, zmq::recv_flags::none);
58
59
return
parse_response<daphnemodules::ConfigureResponse>(reply, daphnemodules::CONFIGURE_FE);
60
}
61
62
daphnemodules::ConfigureCLKsResponse
63
ControlClient::configure_clks
(
const
daphnemodules::ConfigureCLKsRequest& req)
64
{
65
auto
bytes = make_envelope_bytes(daphnemodules::CONFIGURE_CLKS, req);
66
socket_
.send(zmq::buffer(bytes), zmq::send_flags::none);
67
68
zmq::message_t reply;
69
socket_
.recv(reply, zmq::recv_flags::none);
70
71
return
parse_response<daphnemodules::ConfigureCLKsResponse>(reply, daphnemodules::CONFIGURE_CLKS);
72
}
73
74
}
// namespace daphne::zmq
type
type
Definition
TriggerActivity_serialization.hpp:48
daphne::zmq::ControlClient::configure_clks
daphnemodules::ConfigureCLKsResponse configure_clks(const daphnemodules::ConfigureCLKsRequest &req)
Definition
ControlClient.cpp:63
daphne::zmq::ControlClient::configure
daphnemodules::ConfigureResponse configure(const daphnemodules::ConfigureRequest &req)
Definition
ControlClient.cpp:51
daphne::zmq::ControlClient::Milliseconds
std::chrono::milliseconds Milliseconds
Definition
ControlClient.hpp:25
daphne::zmq::ControlClient::ControlClient
ControlClient(zmq::context_t &ctx, std::string_view ip, uint16_t port, Milliseconds timeout=Milliseconds{ 500 })
Definition
ControlClient.cpp:40
daphne::zmq::ControlClient::socket_
zmq::socket_t socket_
Definition
ControlClient.hpp:36
daphne::zmq
Definition
ControlClient.cpp:4
Generated on
for DUNE-DAQ by
1.18.0