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");
107 if (this->m_tmp_request) {
109 this->m_tmp_request =
nullptr;
118 if (this->m_tmp_request) {
120 this->m_tmp_request =
nullptr;
129 if (this->m_tmp_request) {
131 this->m_tmp_request =
nullptr;
140 if (this->m_tmp_request) {
142 this->m_tmp_request =
nullptr;
148 if (this->m_tmp_request) {
149 this->m_tmp_request->SetException(
151 this->m_tmp_request =
nullptr;
161 if (this->m_tmp_request) {
163 this->m_tmp_request =
nullptr;
170 "ActivityGoingRunning",
172 static_cast<BizLogicIf&
>(this->m_logic).ActivityGoingRunning(stop_token);
174 this->m_success_handler,
175 this->m_error_handler);
180 static_cast<BizLogicIf&
>(this->m_logic).ActivityGoingIdle(stop_token);
182 this->m_success_handler,
183 this->m_error_handler);
188 static_cast<BizLogicIf&
>(this->m_logic).ActivityOpening(stop_token);
190 this->m_success_handler,
191 this->m_error_handler);
196 static_cast<BizLogicIf&
>(this->m_logic).ActivityClosing(stop_token);
198 this->m_success_handler,
199 this->m_error_handler);
204 static_cast<BizLogicIf&
>(this->m_logic).ActivityOpened(stop_token);
207 this->m_error_handler);
212 static_cast<BizLogicIf&
>(this->m_logic).ActivityClosed(stop_token);
215 this->m_error_handler);
218 "ActivityRecovering",
220 static_cast<BizLogicIf&
>(this->m_logic).ActivityRecovering(stop_token);
222 this->m_success_handler,
223 this->m_error_handler);
234 this->mm.ModStateType(
"On::Operational",
Parallel);
236 const std::string parent_region =
"On::Operational:";
238 this->mm.AddState(
Composite, parent_region,
"On::Operational");
240 this->mm.AddState(
Initial,
"On::Operational::Initial", parent_region);
241 this->mm.AddState(
Simple,
"On::Operational::Idle", parent_region);
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");
246 this->mm.AddState(
Simple,
"On::Operational::Opened", parent_region,
"ActivityOpened");
247 this->mm.AddState(
Simple,
"On::Operational::Closed", parent_region,
"ActivityClosed");
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
ModelBuilder(StateMachineEngine &engine)
Definition loopaware.hpp:232
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:161
std::string Str() const
Convenience function for constructing a std::string from the exception.
Definition exceptions.hpp:179
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
void RegisterAction(const std::string &id, ActionMethod action)
Register action.
Definition stateMachineEngine.cpp:86
void RegisterRejectHandler(const std::string &id, RejectMethod reject)
Register reject handler.
Definition stateMachineEngine.cpp:129
void RegisterActivity(const std::string &id, ActivityMethod activity, SuccessMethod on_success, FailureMethod on_failure)
Register activity.
Definition stateMachineEngine.cpp:121
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
std::shared_ptr< typename EVENT::payload_t > GetPayloadNothrow(scxml4cpp::Context *c)
Definition stateMachineEngine.hpp:256
const std::string STD_OK_REPLY
Definition stdComponent.hpp:86
constexpr bool is_base_of_template_v
Definition utils.hpp:37
Lifecycle of a basic 'RtcComponent'.
Life cycle extension to make RtcComponent Loopaware.
Definition loopaware.hpp:32
Life cycle extension to make RtcComponent Runnable.
Definition runnable.hpp:31