13#ifndef RTCTK_COMPONENTFRAMEWORK_RTCCOMPONENT_HPP
14#define RTCTK_COMPONENTFRAMEWORK_RTCCOMPONENT_HPP
44 : rtctkif::ExceptionErr(
"Request " + request_id +
" rejected in state " + state_id,
99 Super::InputStage::Start();
120 this->
m_engine.
PostEvent(std::make_unique<events::UpdateError>(std::move(eptr)));
149 if (
auto eptr = GetPayloadNothrow<events::UpdateError>(c); eptr) {
160 engine.
RegisterGuard(
"GuardUpdatingAllowed", [
this](
auto c) {
161 auto req = GetPayloadNothrow<events::Update>(c);
162 if (req ==
nullptr) {
169 if (act_state.find(s) != std::string::npos) {
174 std::string string_arg = req->GetRequestPayload();
175 JsonPayload json_arg = JsonPayload::parse(string_arg);
179 engine.
RegisterGuard(
"GuardDisablingAllowed", [
this](
auto c) {
182 if (act_state.find(s) != std::string::npos) {
195 JsonPayload json_arg = JsonPayload::parse(string_arg);
217 const std::string update_region =
"On:Update";
221 this->
mm.
AddState(
Simple,
"On:Update:Busy", update_region ,
"ActivityUpdating" ,
"ActionUpdatingEntry");
223 this->
mm.
AddTrans(
"On:Update:Initial" ,
"On:Update:Idle" );
224 this->
mm.
AddTrans(
"On:Update:Idle" ,
"On:Update:Busy" ,
"events.Update",
"GuardUpdatingAllowed");
225 this->
mm.
AddTrans(
"On:Update:Busy" ,
"On:Update:Idle" ,
"events.UpdateDone",
"" ,
"ActionUpdatingDone" );
226 this->
mm.
AddTrans(
"On:Update:Busy" ,
"On:Update:Idle" ,
"events.UpdateError",
"" ,
"ActionUpdatingFailed" );
228 this->
mm.
ModTransGuard(
"On::Operational",
"On::NotOperational::Disabling",
"events.Disable",
"",
"GuardDisablingAllowed");
ModelManipulator mm
Definition: modelBuilderBase.hpp:79
void ModTransGuard(std::string const &source_id, std::string const &target_id, std::string const &event_id, std::string const &guard_id, std::string const &new_guard_id)
Modifies the guard of a transition.
Definition: modelManipulator.cpp:297
void AddTrans(std::string const &source_id, std::string const &target_id, std::string const &event_id="", std::string const &guard_id="", std::string const &action_id="")
Adds a new transition.
Definition: modelManipulator.cpp:229
void AddState(StateType type, std::string const &id, std::string const &parent_id="", std::string const &activity_id="", std::string const &entry_action_id="", std::string const &exit_action_id="")
Adds a new state.
Definition: modelManipulator.cpp:30
Adapter object intended to be used in contexts without direct access to the output-stream object.
Definition: exceptions.hpp:185
std::string Str() const
Convenience function for constructing a std::string from the exception.
Definition: exceptions.hpp:203
Thrown if somebody sent a stop or abort command.
Definition: rtcComponent.hpp:29
RequestAborted()
Definition: rtcComponent.hpp:32
static constexpr int32_t ERROR_CODE
Definition: rtcComponent.hpp:31
Thrown if the command was accepted but the task to run failed.
Definition: rtcComponent.hpp:53
RequestFailed(std::string const &message)
Definition: rtcComponent.hpp:59
static constexpr int32_t ERROR_CODE
Definition: rtcComponent.hpp:58
Thrown if a command is not allowed in current state or guard.
Definition: rtcComponent.hpp:40
RequestRejected(std::string const &request_id, std::string const &state_id)
Definition: rtcComponent.hpp:43
static constexpr int32_t ERROR_CODE
Definition: rtcComponent.hpp:42
Definition: rtcComponent.hpp:80
virtual void ActivityUpdating(StopToken st, JsonPayload const &args)
Definition: rtcComponent.hpp:83
virtual bool GuardUpdatingAllowed(JsonPayload const &args)
Definition: rtcComponent.hpp:86
Definition: rtcComponent.hpp:213
ModelBuilder(StateMachineEngine &engine)
Definition: rtcComponent.hpp:215
Definition: rtcComponent.hpp:108
std::function< void(std::exception_ptr)> m_update_error_handler
Definition: rtcComponent.hpp:205
std::list< std::string > m_no_disable_in_states
Definition: rtcComponent.hpp:207
std::list< std::string > m_no_update_in_states
Definition: rtcComponent.hpp:206
OutputStage(StateMachineEngine &engine, BizLogicIf &bl)
Definition: rtcComponent.hpp:110
std::function< void()> m_update_success_handler
Definition: rtcComponent.hpp:204
std::shared_ptr< rad::cii::Request< std::string, std::string > > m_tmp_update_request
Definition: rtcComponent.hpp:203
Definition: stateMachineEngine.hpp:35
void RegisterRejectHandler(std::string const &id, RejectMethod reject)
Register reject handler.
Definition: stateMachineEngine.cpp:131
void RegisterActivity(std::string const &id, ActivityMethod activity, SuccessMethod on_success, FailureMethod on_failure)
Register activity.
Definition: stateMachineEngine.cpp:123
void RegisterGuard(std::string const &id, GuardMethod guard)
Register guard.
Definition: stateMachineEngine.cpp:110
std::string GetState()
Queries the current state.
Definition: stateMachineEngine.cpp:153
void RegisterAction(std::string const &id, ActionMethod action)
Register action.
Definition: stateMachineEngine.cpp:86
void PostEvent(rad::SharedEvent s)
Injects a new event into the state machine engine.
Definition: stateMachineEngine.cpp:148
Definition: stdComponent.hpp:148
Definition: stdComponent.hpp:420
Definition: stdComponent.hpp:183
StateMachineEngine & m_engine
Definition: stdComponent.hpp:410
BizLogicIf & m_logic
Definition: stdComponent.hpp:411
static void Register(CommandReplier &replier, StateMachineEngine &engine)
Definition: rtcCmdsImpl.hpp:73
Defines the JSON payload type JsonPayload.
Definition: commandReplier.cpp:22
const std::string STD_OK_REPLY
Definition: stdComponent.hpp:86
nlohmann::json JsonPayload
Type requirements:
Definition: jsonPayload.hpp:25
rad::StopToken StopToken
Definition: stopToken.hpp:20
@ Simple
Definition: model.hpp:22
@ Composite
Definition: model.hpp:22
@ Initial
Definition: model.hpp:22
StdComponent RtcComponentSuper
Definition: rtcComponent.hpp:66
Implementation of MAL commands for layer 'RtcComponent'.
Lifecycle of the 'Standard Component'.
Basic life cycle for RtcComponent.
Definition: rtcComponent.hpp:74
Basic life cycle for StdComponent.
Definition: stdComponent.hpp:144