RTC Toolkit  0.1.0-alpha
stateMachineEngine.hpp
Go to the documentation of this file.
1 
9 #ifndef RTCTK_COMPONENTFRAMEWORK_STATEMACHINEENGINE_HPP
10 #define RTCTK_COMPONENTFRAMEWORK_STATEMACHINEENGINE_HPP
11 
13 #include <rad/smAdapter.hpp>
14 #include <rad/signal.hpp>
15 
16 namespace rtctk::componentFramework {
17 
18 using ActionMethod = std::function<void(scxml4cpp::Context* c)>;
19 using GuardMethod = std::function<bool(scxml4cpp::Context* c)>;
20 using ActivityMethod = std::function<void(StopToken f)>;
21 using SuccessMethod = std::function<void()>;
22 using FailureMethod = std::function<void(const std::runtime_error&)>;
23 using RejectMethod = std::function<void(const rad::AnyEvent&, const std::string& state)>;
24 using StateMethod = std::function<void(const std::string&)>;
25 
27  public:
28  StateMachineEngine(rad::UniqueEvent exit_event);
30 
31  void RegisterModel(const std::string& scxml_filename);
32  void RegisterAction(std::string const& id, ActionMethod action);
33  void RegisterGuard(std::string const& id, GuardMethod guard);
34  void RegisterActivity(std::string const& id, ActivityMethod activity, SuccessMethod on_success, FailureMethod on_failure);
35  void RegisterRejectHandler(std::string const& id, RejectMethod reject);
36  template <typename T>
38  m_fsm_engine.RegisterDefaultRequestRejectHandler<T>();
39  }
40  void RegisterStateChangeHandler(StateMethod on_statechange);
41  void PostEvent(rad::SharedEvent s);
42  std::string GetState();
43  void Work();
44  void Stop();
45 
46  private:
47  boost::asio::io_service m_io_service;
48  scxml4cpp::Context m_fsm_ctx;
49  scxml4cpp::EventQueue m_event_queue;
50  rad::SMAdapter m_fsm_engine;
51  rad::Signal m_signal;
52 
53  std::string m_scxml_file_name;
54  std::list<scxml4cpp::Action*> m_action_list;
55  std::list<scxml4cpp::Activity*> m_activity_list;
56 };
57 
58 } // closing namespace
59 
60 #endif
rtctk::componentFramework::SuccessMethod
std::function< void()> SuccessMethod
Definition: stateMachineEngine.hpp:21
rtctk::componentFramework::StateMachineEngine::Work
void Work()
Definition: stateMachineEngine.cpp:73
rtctk::componentFramework::StateMachineEngine::RegisterModel
void RegisterModel(const std::string &scxml_filename)
Definition: stateMachineEngine.cpp:37
rtctk::componentFramework::ActivityMethod
std::function< void(StopToken f)> ActivityMethod
Definition: stateMachineEngine.hpp:20
rtctk::componentFramework
Definition: rtcComponent.hpp:17
rtctk::componentFramework::RejectMethod
std::function< void(const rad::AnyEvent &, const std::string &state)> RejectMethod
Definition: stateMachineEngine.hpp:23
rtctk::componentFramework::StateMachineEngine::RegisterRejectHandler
void RegisterRejectHandler()
Definition: stateMachineEngine.hpp:37
rtctk::componentFramework::StateMachineEngine::RegisterGuard
void RegisterGuard(std::string const &id, GuardMethod guard)
Definition: stateMachineEngine.cpp:47
rtctk::componentFramework::StopToken
rad::StopToken StopToken
Definition: stopToken.hpp:16
rtctk::componentFramework::StateMachineEngine
Definition: stateMachineEngine.hpp:26
rtctk::componentFramework::StateMachineEngine::RegisterAction
void RegisterAction(std::string const &id, ActionMethod action)
Definition: stateMachineEngine.cpp:42
rtctk::componentFramework::StateMachineEngine::~StateMachineEngine
~StateMachineEngine()
Definition: stateMachineEngine.cpp:26
rtctk::componentFramework::StateMethod
std::function< void(const std::string &)> StateMethod
Definition: stateMachineEngine.hpp:24
rtctk::componentFramework::GuardMethod
std::function< bool(scxml4cpp::Context *c)> GuardMethod
Definition: stateMachineEngine.hpp:19
rtctk::componentFramework::StateMachineEngine::RegisterRejectHandler
void RegisterRejectHandler(std::string const &id, RejectMethod reject)
stopToken.hpp
A simple Stop Token.
rtctk::componentFramework::StateMachineEngine::RegisterStateChangeHandler
void RegisterStateChangeHandler(StateMethod on_statechange)
Definition: stateMachineEngine.cpp:57
rtctk::componentFramework::StateMachineEngine::GetState
std::string GetState()
Definition: stateMachineEngine.cpp:68
rtctk::componentFramework::FailureMethod
std::function< void(const std::runtime_error &)> FailureMethod
Definition: stateMachineEngine.hpp:22
rtctk::componentFramework::StateMachineEngine::PostEvent
void PostEvent(rad::SharedEvent s)
Definition: stateMachineEngine.cpp:62
rtctk::componentFramework::StateMachineEngine::StateMachineEngine
StateMachineEngine(rad::UniqueEvent exit_event)
Definition: stateMachineEngine.cpp:16
rtctk::componentFramework::StateMachineEngine::Stop
void Stop()
Definition: stateMachineEngine.cpp:90
rtctk::componentFramework::StateMachineEngine::RegisterActivity
void RegisterActivity(std::string const &id, ActivityMethod activity, SuccessMethod on_success, FailureMethod on_failure)
Definition: stateMachineEngine.cpp:52
rtctk::componentFramework::ActionMethod
std::function< void(scxml4cpp::Context *c)> ActionMethod
Definition: stateMachineEngine.hpp:18