13#ifndef RTCTK_COMPONENTFRAMEWORK_LOOPAWARE_HPP
14#define RTCTK_COMPONENTFRAMEWORK_LOOPAWARE_HPP
22template <
typename Super>
31template <
typename Super>
33 static_assert(std::is_base_of_v<RtcComponent, Super>,
"'Loopaware' requires 'RtcComponent'");
55 using Super::InputStage::InputStage;
58 Super::InputStage::Start();
82 this->m_no_disable_in_states.push_back(
"On::Operational::Error");
83 this->m_no_disable_in_states.push_back(
"On::Operational::Recovering");
84 this->m_no_disable_in_states.push_back(
"On::Operational::GoingRunning");
85 this->m_no_disable_in_states.push_back(
"On::Operational::GoingIdle");
86 this->m_no_disable_in_states.push_back(
"On::Operational::Opened");
87 this->m_no_disable_in_states.push_back(
"On::Operational::Closed");
88 this->m_no_disable_in_states.push_back(
"On::Operational::Opening");
89 this->m_no_disable_in_states.push_back(
"On::Operational::Closing");
93 this->m_no_update_in_states.push_back(
"On::Operational::Error");
94 this->m_no_update_in_states.push_back(
"On::Operational::Recovering");
95 this->m_no_update_in_states.push_back(
"On::Operational::GoingRunning");
96 this->m_no_update_in_states.push_back(
"On::Operational::GoingIdle");
97 this->m_no_update_in_states.push_back(
"On::Operational::Opening");
98 this->m_no_update_in_states.push_back(
"On::Operational::Closing");
102 engine.RegisterAction(
"ActionGoingRunningEntry", [
this](
auto c) {
106 engine.RegisterAction(
"ActionGoingRunningDone", [
this](
auto c) {
107 if (this->m_tmp_request) {
109 this->m_tmp_request =
nullptr;
113 engine.RegisterAction(
"ActionGoingIdleEntry", [
this](
auto c) {
117 engine.RegisterAction(
"ActionGoingIdleDone", [
this](
auto c) {
118 if (this->m_tmp_request) {
120 this->m_tmp_request =
nullptr;
124 engine.RegisterAction(
"ActionOpeningEntry", [
this](
auto c) {
128 engine.RegisterAction(
"ActionOpeningDone", [
this](
auto c) {
129 if (this->m_tmp_request) {
131 this->m_tmp_request =
nullptr;
135 engine.RegisterAction(
"ActionClosingEntry", [
this](
auto c) {
139 engine.RegisterAction(
"ActionClosingDone", [
this](
auto c) {
140 if (this->m_tmp_request) {
142 this->m_tmp_request =
nullptr;
146 engine.RegisterAction(
"ActionErrorEntry", [
this](
auto c) {
148 if (this->m_tmp_request) {
149 this->m_tmp_request->SetException(
151 this->m_tmp_request =
nullptr;
156 engine.RegisterAction(
"ActionRecoveringEntry", [
this](
auto c) {
160 engine.RegisterAction(
"ActionRecoveringDone", [
this](
auto c) {
161 if (this->m_tmp_request) {
163 this->m_tmp_request =
nullptr;
170 "ActivityGoingRunning",
174 this->m_success_handler,
175 this->m_error_handler);
182 this->m_success_handler,
183 this->m_error_handler);
190 this->m_success_handler,
191 this->m_error_handler);
198 this->m_success_handler,
199 this->m_error_handler);
207 this->m_error_handler);
215 this->m_error_handler);
218 "ActivityRecovering",
222 this->m_success_handler,
223 this->m_error_handler);
234 this->mm.ModStateType(
"On::Operational",
Parallel);
242 this->mm.AddState(
Simple,
"On::Operational::Error",
parent_region,
"" ,
"ActionErrorEntry");
243 this->mm.AddState(
Simple,
"On::Operational::Recovering",
parent_region,
"ActivityRecovering" ,
"ActionRecoveringEntry");
244 this->mm.AddState(
Simple,
"On::Operational::GoingRunning",
parent_region,
"ActivityGoingRunning" ,
"ActionGoingRunningEntry");
245 this->mm.AddState(
Simple,
"On::Operational::GoingIdle",
parent_region,
"ActivityGoingIdle" ,
"ActionGoingIdleEntry");
248 this->mm.AddState(
Simple,
"On::Operational::Opening",
parent_region,
"ActivityOpening" ,
"ActionOpeningEntry");
249 this->mm.AddState(
Simple,
"On::Operational::Closing",
parent_region,
"ActivityClosing" ,
"ActionClosingEntry");
251 this->mm.AddTrans(
"On::Operational::Initial" ,
"On::Operational::Idle" );
252 this->mm.AddTrans(
parent_region ,
"On::Operational::Error" ,
"events.Error");
254 this->mm.AddTrans(
"On::Operational::Error" ,
"On::Operational::Recovering" ,
"events.Recover");
255 this->mm.AddTrans(
"On::Operational::Recovering" ,
"On::Operational::Idle" ,
"events.Done",
"" ,
"ActionRecoveringDone");
257 this->mm.AddTrans(
"On::Operational::Idle" ,
"On::Operational::GoingRunning",
"events.Run");
258 this->mm.AddTrans(
"On::Operational::GoingRunning" ,
"On::Operational::Opened" ,
"events.Done",
"" ,
"ActionGoingRunningDone");
260 this->mm.AddTrans(
"On::Operational::Opened" ,
"On::Operational::GoingIdle" ,
"events.Idle");
261 this->mm.AddTrans(
"On::Operational::GoingIdle" ,
"On::Operational::Idle" ,
"events.Done",
"" ,
"ActionGoingIdleDone");
263 this->mm.AddTrans(
"On::Operational::Opened" ,
"On::Operational::Closing" ,
"events.Close");
264 this->mm.AddTrans(
"On::Operational::Closing" ,
"On::Operational::Closed" ,
"events.Done",
"" ,
"ActionClosingDone");
265 this->mm.AddTrans(
"On::Operational::Closed" ,
"On::Operational::Opening" ,
"events.Open");
266 this->mm.AddTrans(
"On::Operational::Opening" ,
"On::Operational::Opened" ,
"events.Done",
"" ,
"ActionOpeningDone");
static void Register(CommandReplier &replier, StateMachineEngine &engine)
Definition rtcCmdsImpl.hpp:37
static void Register(CommandReplier &replier, StateMachineEngine &engine)
Definition loopCmdsImpl.hpp:37
Definition loopaware.hpp:39
virtual void ActivityOpened(StopToken st)
Definition loopaware.hpp:46
virtual void ActivityGoingIdle(StopToken st)
Definition loopaware.hpp:42
virtual void ActivityOpening(StopToken st)
Definition loopaware.hpp:44
virtual void ActivityClosed(StopToken st)
Definition loopaware.hpp:47
virtual void ActivityGoingRunning(StopToken st)
Definition loopaware.hpp:41
virtual void ActivityRecovering(StopToken st)
Definition loopaware.hpp:43
virtual void ActivityClosing(StopToken st)
Definition loopaware.hpp:45
Definition loopaware.hpp:230
ModelBuilder(StateMachineEngine &engine)
Definition loopaware.hpp:232
Definition loopaware.hpp:69
OutputStage(StateMachineEngine &engine, BizLogicIf &bl)
Definition loopaware.hpp:71
Adapter object intended to be used in contexts without direct access to the output-stream object.
Definition exceptions.hpp:159
std::string Str() const
Convenience function for constructing a std::string from the exception.
Definition exceptions.hpp:177
static void Register(CommandReplier &replier, StateMachineEngine &engine)
Definition rtcCmdsImpl.hpp:68
Thrown if the command was accepted but the task to run failed.
Definition rtcComponent.hpp:53
Thrown if a command is not allowed in current state or guard.
Definition rtcComponent.hpp:40
Definition stateMachineEngine.hpp:35
Implementation of MAL commands for layer 'Loopaware'.
Definition commandReplier.cpp:22
@ Simple
Definition model.hpp:23
@ Composite
Definition model.hpp:23
@ Parallel
Definition model.hpp:23
@ Initial
Definition model.hpp:23
rad::StopToken StopToken
Definition stopToken.hpp:20
const std::string STD_OK_REPLY
Definition stdComponent.hpp:86
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
Lifecycle of a basic 'RtcComponent'.
Life cycle extension to make RtcComponent Loopaware.
Definition loopaware.hpp:32