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");
86 if (this->m_tmp_request) {
88 this->m_tmp_request =
nullptr;
99 if (this->m_tmp_request) {
101 this->m_tmp_request =
nullptr;
109 if (this->m_tmp_request) {
110 this->m_tmp_request->SetException(
112 this->m_tmp_request =
nullptr;
124 if (this->m_tmp_request) {
126 this->m_tmp_request =
nullptr;
133 "ActivityGoingRunning",
135 static_cast<BizLogicIf&
>(this->m_logic).ActivityGoingRunning(stop_token);
137 this->m_success_handler,
138 this->m_error_handler);
143 static_cast<BizLogicIf&
>(this->m_logic).ActivityGoingIdle(stop_token);
145 this->m_success_handler,
146 this->m_error_handler);
151 static_cast<BizLogicIf&
>(this->m_logic).ActivityRunning(stop_token);
153 this->m_success_handler,
154 this->m_error_handler);
157 "ActivityRecovering",
159 static_cast<BizLogicIf&
>(this->m_logic).ActivityRecovering(stop_token);
161 this->m_success_handler,
162 this->m_error_handler);
170 this->mm.ModStateType(
"On::Operational",
Parallel);
172 const std::string parent_region =
"On::Operational:";
174 this->mm.AddState(
Composite, parent_region,
"On::Operational");
176 this->mm.AddState(
Initial,
"On::Operational::Initial", parent_region);
177 this->mm.AddState(
Simple,
"On::Operational::Idle", parent_region);
178 this->mm.AddState(
Simple,
"On::Operational::Error", parent_region ,
"" ,
"ActionErrorEntry");
179 this->mm.AddState(
Simple,
"On::Operational::Running", parent_region ,
"ActivityRunning");
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: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 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
OutputStage(StateMachineEngine &engine, BizLogicIf &bl)
Definition runnable.hpp:57
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
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
ModelBuilder(StateMachineEngine &engine)
Definition runnable.hpp:168
Life cycle extension to make RtcComponent Runnable.
Definition runnable.hpp:31