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