13#ifndef RTCTK_COMPONENTFRAMEWORK_RUNABLE_HPP
14#define RTCTK_COMPONENTFRAMEWORK_RUNABLE_HPP
22template <
typename Super>
30template <
typename Super>
32 static_assert(std::is_base_of_v<RtcComponent, Super>,
"'Runnable' requires 'RtcComponent'");
45 using Super::InputStage::InputStage;
48 Super::InputStage::Start();
66 this->m_no_disable_in_states.push_back(
"On::Operational::Error");
67 this->m_no_disable_in_states.push_back(
"On::Operational::Recovering");
68 this->m_no_disable_in_states.push_back(
"On::Operational::GoingRunning");
69 this->m_no_disable_in_states.push_back(
"On::Operational::GoingIdle");
70 this->m_no_disable_in_states.push_back(
"On::Operational::Running");
74 this->m_no_update_in_states.push_back(
"On::Operational::GoingRunning");
75 this->m_no_update_in_states.push_back(
"On::Operational::GoingIdle");
76 this->m_no_update_in_states.push_back(
"On::Operational::Error");
77 this->m_no_update_in_states.push_back(
"On::Operational::Recovering");
81 engine.RegisterAction(
"ActionGoingRunningEntry", [
this](
auto c) {
85 engine.RegisterAction(
"ActionGoingRunningDone", [
this](
auto c) {
86 if (this->m_tmp_request) {
88 this->m_tmp_request =
nullptr;
94 engine.RegisterAction(
"ActionGoingIdleEntry", [
this](
auto c) {
98 engine.RegisterAction(
"ActionGoingIdleDone", [
this](
auto c) {
99 if (this->m_tmp_request) {
101 this->m_tmp_request =
nullptr;
107 engine.RegisterAction(
"ActionErrorEntry", [
this](
auto c) {
109 if (this->m_tmp_request) {
110 this->m_tmp_request->SetException(
112 this->m_tmp_request =
nullptr;
119 engine.RegisterAction(
"ActionRecoveringEntry", [
this](
auto c) {
123 engine.RegisterAction(
"ActionRecoveringDone", [
this](
auto c) {
124 if (this->m_tmp_request) {
126 this->m_tmp_request =
nullptr;
133 "ActivityGoingRunning",
137 this->m_success_handler,
138 this->m_error_handler);
145 this->m_success_handler,
146 this->m_error_handler);
153 this->m_success_handler,
154 this->m_error_handler);
157 "ActivityRecovering",
161 this->m_success_handler,
162 this->m_error_handler);
170 this->mm.ModStateType(
"On::Operational",
Parallel);
178 this->mm.AddState(
Simple,
"On::Operational::Error",
parent_region ,
"" ,
"ActionErrorEntry");
180 this->mm.AddState(
Simple,
"On::Operational::Recovering",
parent_region ,
"ActivityRecovering" ,
"ActionRecoveringEntry");
181 this->mm.AddState(
Simple,
"On::Operational::GoingRunning",
parent_region ,
"ActivityGoingRunning" ,
"ActionGoingRunningEntry");
182 this->mm.AddState(
Simple,
"On::Operational::GoingIdle",
parent_region ,
"ActivityGoingIdle" ,
"ActionGoingIdleEntry");
184 this->mm.AddTrans(
"On::Operational::Initial" ,
"On::Operational::Idle" );
185 this->mm.AddTrans(
parent_region ,
"On::Operational::Error" ,
"events.Error");
187 this->mm.AddTrans(
"On::Operational::Error" ,
"On::Operational::Recovering" ,
"events.Recover");
188 this->mm.AddTrans(
"On::Operational::Recovering" ,
"On::Operational::Idle" ,
"events.Done",
"" ,
"ActionRecoveringDone");
190 this->mm.AddTrans(
"On::Operational::Idle" ,
"On::Operational::GoingRunning" ,
"events.Run");
191 this->mm.AddTrans(
"On::Operational::GoingRunning" ,
"On::Operational::Running" ,
"events.Done",
"" ,
"ActionGoingRunningDone");
193 this->mm.AddTrans(
"On::Operational::Running" ,
"On::Operational::GoingIdle" ,
"events.Idle");
194 this->mm.AddTrans(
"On::Operational::GoingIdle" ,
"On::Operational::Idle" ,
"events.Done",
"" ,
"ActionGoingIdleDone");
196 this->mm.AddTrans(
"On::Operational::Running" ,
"On::Operational::GoingIdle" ,
"events.Done");
static void Register(CommandReplier &replier, StateMachineEngine &engine)
Definition rtcCmdsImpl.hpp:37
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 runnable.hpp:35
virtual void ActivityGoingRunning(StopToken st)
Definition runnable.hpp:37
virtual void ActivityRunning(StopToken st)
Definition runnable.hpp:39
virtual void ActivityRecovering(StopToken st)
Definition runnable.hpp:40
virtual void ActivityGoingIdle(StopToken st)
Definition runnable.hpp:38
Definition runnable.hpp:55
OutputStage(StateMachineEngine &engine, BizLogicIf &bl)
Definition runnable.hpp:57
Definition stateMachineEngine.hpp:35
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'.
Definition runnable.hpp:166
ModelBuilder(StateMachineEngine &engine)
Definition runnable.hpp:168
Life cycle extension to make RtcComponent Runnable.
Definition runnable.hpp:31