HLCC Documentation 2.2.0
Loading...
Searching...
No Matches
metadaqCmdsImpl.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2020-2025 European Southern Observatory (ESO)
2//
3// SPDX-License-Identifier: LGPL-3.0-only
4
13#ifndef HLCC_TELIF_TELIF_METADAQCMDSIMPL_HPP
14#define HLCC_TELIF_TELIF_METADAQCMDSIMPL_HPP
15
16#include "Metadaqif.hpp"
17#include <rad/exceptions.hpp>
18#include <rad/smAdapter.hpp>
19
20#include "telif/metadaqCmds.rad.hpp"
21#include "telif/logger.hpp"
22
23
24namespace hlcc::telif {
25
26class MetadaqCmdsImpl : public metadaqif::AsyncMetaDaq {
27public:
28 explicit MetadaqCmdsImpl(rad::SMAdapter& sm) : m_sm(sm) {
29 RAD_TRACE(GetLogger());
30 }
31
32 virtual ~MetadaqCmdsImpl() {
33 RAD_TRACE(GetLogger());
34 }
35
36 virtual elt::mal::future<std::shared_ptr<::metadaqif::DaqReply>> StartDaq(const std::string& id) override {
37 RAD_TRACE(GetLogger());
38 LOG4CPLUS_INFO(GetLogger(), "Received StartDaq with: Id " << id);
39
40 auto ev = std::make_shared<MetadaqCmds::StartDaq>(id);
41
42 m_sm.RegisterRejectHandler(MetadaqCmds::StartDaq::ID, [](const rad::AnyEvent& event, std::string const& state) {
43 RAD_TRACE(GetLogger());
44 auto req = rad::GetPayloadNothrow<MetadaqCmds::StartDaq>(event);
45 if (req == nullptr) {
46 LOG4CPLUS_ERROR(GetLogger(), event.GetId() << " has no associated request!");
47 return;
48 }
49 /* Get the 'id' from payload*/
50 const std::string received_id = req->GetRequestPayload();
51 metadaqif::DaqException rply_exception(received_id, "Request rejected in state " + state);
52 req->SetException(rply_exception);
53 });
54
55 m_sm.PostEvent(ev);
56
57 return ev->GetPayload().GetReplyFuture();
58 }
59
60 virtual elt::mal::future<std::shared_ptr<::metadaqif::DaqStopReply>> StopDaq(const std::string& id) override {
61 RAD_TRACE(GetLogger());
62 LOG4CPLUS_INFO(GetLogger(), "Received StopDaq with: Id " << id);
63
64 auto ev = std::make_shared<MetadaqCmds::StopDaq>(id);
65
66 m_sm.RegisterRejectHandler(MetadaqCmds::StopDaq::ID, [](const rad::AnyEvent& event, std::string const& state) {
67 RAD_TRACE(GetLogger());
68 auto req = rad::GetPayloadNothrow<MetadaqCmds::StopDaq>(event);
69 if (req == nullptr) {
70 LOG4CPLUS_ERROR(GetLogger(), event.GetId() << " has no associated request!");
71 return;
72 }
73 /* Get the 'id' from payload*/
74 const std::string received_id = req->GetRequestPayload();
75 metadaqif::DaqException rply_exception(received_id, "Request rejected in state " + state);
76 req->SetException(rply_exception);
77 });
78
79 m_sm.PostEvent(ev);
80
81 return ev->GetPayload().GetReplyFuture();
82 }
83
84 virtual elt::mal::future<std::shared_ptr<::metadaqif::DaqReply>> AbortDaq(const std::string& id) override {
85 RAD_TRACE(GetLogger());
86 LOG4CPLUS_INFO(GetLogger(), "Received AbortDaq with: Id " << id);
87
88 auto ev = std::make_shared<MetadaqCmds::AbortDaq>(id);
89
90 m_sm.RegisterRejectHandler(MetadaqCmds::AbortDaq::ID, [](const rad::AnyEvent& event, std::string const& state) {
91 RAD_TRACE(GetLogger());
92 auto req = rad::GetPayloadNothrow<MetadaqCmds::AbortDaq>(event);
93 if (req == nullptr) {
94 LOG4CPLUS_ERROR(GetLogger(), event.GetId() << " has no associated request!");
95 return;
96 }
97 /* Get the 'id' from payload*/
98 const std::string received_id = req->GetRequestPayload();
99 metadaqif::DaqException rply_exception(received_id, "Request rejected in state " + state);
100 req->SetException(rply_exception);
101 });
102
103 m_sm.PostEvent(ev);
104
105 return ev->GetPayload().GetReplyFuture();
106 }
107
108 virtual elt::mal::future<std::shared_ptr<::metadaqif::DaqStatus>> GetDaqStatus(const std::string& id) override {
109 RAD_TRACE(GetLogger());
110 LOG4CPLUS_INFO(GetLogger(), "Received GetDaqStatus with: Id " << id);
111
112 auto ev = std::make_shared<MetadaqCmds::GetDaqStatus>(id);
113
114 m_sm.RegisterRejectHandler(MetadaqCmds::GetDaqStatus::ID, [](const rad::AnyEvent& event, std::string const& state) {
115 RAD_TRACE(GetLogger());
116 auto req = rad::GetPayloadNothrow<MetadaqCmds::GetDaqStatus>(event);
117 if (req == nullptr) {
118 LOG4CPLUS_ERROR(GetLogger(), event.GetId() << " has no associated request!");
119 return;
120 }
121 /* Get the 'id' from payload*/
122 const std::string received_id = req->GetRequestPayload();
123 metadaqif::DaqException rply_exception(received_id, "Request rejected in state " + state);
124 req->SetException(rply_exception);
125 });
126
127 m_sm.PostEvent(ev);
128
129 return ev->GetPayload().GetReplyFuture();
130 }
131
132private:
133 rad::SMAdapter& m_sm;
134};
135
136} // namespace hlcc::telif
137
138#endif // HLCC_TELIF_TELIF_METADAQCMDSIMPL_HPP
Default logger name.
Definition metadaqCmdsImpl.hpp:26
virtual ~MetadaqCmdsImpl()
Definition metadaqCmdsImpl.hpp:32
virtual elt::mal::future< std::shared_ptr<::metadaqif::DaqStatus > > GetDaqStatus(const std::string &id) override
Definition metadaqCmdsImpl.hpp:108
virtual elt::mal::future< std::shared_ptr<::metadaqif::DaqReply > > AbortDaq(const std::string &id) override
Definition metadaqCmdsImpl.hpp:84
virtual elt::mal::future< std::shared_ptr<::metadaqif::DaqReply > > StartDaq(const std::string &id) override
Definition metadaqCmdsImpl.hpp:36
MetadaqCmdsImpl(rad::SMAdapter &sm)
Definition metadaqCmdsImpl.hpp:28
virtual elt::mal::future< std::shared_ptr<::metadaqif::DaqStopReply > > StopDaq(const std::string &id) override
Definition metadaqCmdsImpl.hpp:60
Definition configTest.cpp:22
log4cplus::Logger & GetLogger()
Definition logger.cpp:21