10#include <Metadaqif.hpp>
11#include <boost/assert.hpp>
12#include <fmt/format.h>
13#include <fmt/ostream.h>
14#include <log4cplus/loggingmacros.h>
20class RecPropertiesImpl :
public recif::RecProperties {
22 double getAbsTime()
const override {
25 void setAbsTime(
double abs_time)
override {
28 std::string getId()
const override {
31 void setId(
const std::string&
id)
override {
35 std::string getInfo()
const override {
38 void setInfo(
const std::string& info)
override {
41 std::vector<std::string> getPublishers()
const override {
44 void setPublishers(
const std::vector<std::string>& publishers)
override {
46 bool hasKey()
const override {
49 std::unique_ptr<recif::RecProperties> cloneKey()
const override {
50 throw std::runtime_error(
"not clonable");
52 std::unique_ptr<recif::RecProperties> clone()
const override {
53 throw std::runtime_error(
"not clonable");
55 bool keyEquals(
const recif::RecProperties& other)
const override {
73 [
this](boost::future<void>&& f) -> boost::future<void> {
75 if (f.has_exception()) {
76 LOG4CPLUS_INFO(m_params.logger,
77 fmt::format(
"{}: StartAsync: StartAsync metadaq "
78 "failed. Will not start primary data acquisition.",
90boost::future<void> StartAsync::StartMeta() {
91 return SendRequestAndCollectReplies<void>(
92 m_params.meta_sources.begin(),
93 m_params.meta_sources.end(),
95 [](
auto&) { return true; },
99 s.SetState(State::Starting, false);
100 return s.GetSource().GetRrClient().StartDaq(id);
105 [](AsyncOpParams params,
107 boost::future<std::shared_ptr<metadaqif::DaqReply>>&& fut) ->
void {
108 HandleMetaDaqReply<std::shared_ptr<metadaqif::DaqReply>>(
"StartDaq",
117 std::string_view(
"StartDaq() (start metadata acquisition)"))
118 .then(UnwrapVoidReplies);
121boost::future<void> StartAsync::StartPrim() {
122 return SendRequestAndCollectReplies<void>(
123 m_params.prim_sources.begin(),
124 m_params.prim_sources.end(),
125 [](
auto&) { return true; },
128 [
id = m_params.id](Source<PrimSource>& s) {
129 auto& client = s.GetSource().GetRrClient();
130#if defined(UNIT_TEST)
135 auto properties = std::make_shared<RecPropertiesImpl>();
138 auto mal = client.getMal();
139 BOOST_ASSERT_MSG(mal,
"MAL RR client returned invalid MAL pointer");
140 auto properties = mal->createDataEntity<recif::RecProperties>();
142 *properties = RecPropertiesImpl();
144 properties->setId(id);
145 s.SetState(State::Starting, false);
146 return client.RecStart(properties);
149 [](AsyncOpParams params,
150 Source<PrimSource>& source,
151 boost::future<std::shared_ptr<recif::RecStatus>>&& fut) ->
void {
152 HandlePrimDaqReply<std::shared_ptr<recif::RecStatus>>(
"RecStart",
160 std::string_view(
"RecStart() (start primary data acquisition)"))
161 .then(UnwrapVoidReplies);
Declares daq::State and related functions.
Contains declaration for the StartAsync operation.
Simple class that holds the source and associated state.
Parameters required for each async operation.
rad::IoExecutor & executor
StartAsync(AsyncOpParams params) noexcept
boost::future< void > Initiate()
Initiates operation that starts metadata acquisition.
Contains declaration for the async op utilities.