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(
32
fmt::format(
"Unexpected envelope type {} (expected {})"
,
33
env.type(), expected));
34
}
35
ResponseT rsp;
36
rsp.ParseFromString(env.payload());
37
return
rsp;
38
}
39
}
// namespace
40
// ----------------------------------------------------------------------
41
42
ControlClient::ControlClient
(zmq::context_t& ctx,
43
std::string_view ip,
44
uint16_t port,
45
Milliseconds
timeout)
46
:
socket_
(ctx,
zmq
::socket_type::req)
47
{
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));
51
}
52
53
// ---------------------- API -------------------------------------------
54
55
daphnemodules::ConfigureResponse
56
ControlClient::configure
(
const
daphnemodules::ConfigureRequest& req)
57
{
58
auto
bytes = make_envelope_bytes(daphnemodules::CONFIGURE_FE, req);
59
socket_
.send(zmq::buffer(bytes), zmq::send_flags::none);
60
61
zmq::message_t reply;
62
socket_
.recv(reply, zmq::recv_flags::none);
63
64
return
parse_response<daphnemodules::ConfigureResponse>(
65
reply, daphnemodules::CONFIGURE_FE);
66
}
67
68
daphnemodules::ConfigureCLKsResponse
69
ControlClient::configure_clks
(
70
const
daphnemodules::ConfigureCLKsRequest& req)
71
{
72
auto
bytes = make_envelope_bytes(daphnemodules::CONFIGURE_CLKS, req);
73
socket_
.send(zmq::buffer(bytes), zmq::send_flags::none);
74
75
zmq::message_t reply;
76
socket_
.recv(reply, zmq::recv_flags::none);
77
78
return
parse_response<daphnemodules::ConfigureCLKsResponse>(
79
reply, daphnemodules::CONFIGURE_CLKS);
80
}
81
82
}
// 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:69
daphne::zmq::ControlClient::configure
daphnemodules::ConfigureResponse configure(const daphnemodules::ConfigureRequest &req)
Definition
ControlClient.cpp:56
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:42
daphne::zmq::ControlClient::socket_
zmq::socket_t socket_
Definition
ControlClient.hpp:41
daphne::zmq
Definition
ControlClient.cpp:4
Generated on
for DUNE-DAQ by
1.17.0