ifw  0.0.1-dev
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
stateMachine.hpp
Go to the documentation of this file.
1 #ifndef OCM_SERVER_DAQ_STATE_MACHINE_HPP
2 #define OCM_SERVER_DAQ_STATE_MACHINE_HPP
3 
4 #include <list>
5 #include <functional>
6 
7 //#include <gsl/span>
8 #include <rad/AnyEvent.hpp>
9 #include <rad/Dispatcher.hpp>
10 #include <rad/ActionMgr.hpp>
11 #include <scxml4cpp/Action.h>
12 #include <scxml4cpp/Activity.h>
13 #include <scxml4cpp/Context.h>
14 #include <scxml4cpp/EventQueue.h>
15 #include <scxml4cpp/Executor.h>
16 #include <scxml4cpp/StateMachine.h>
17 
18 namespace daq {
19 class Context : public scxml4cpp::Context {
20 public:
21  Context(std::string daq_id);
22  Context(Context const&) = delete;
23  Context(Context &&) = default;
24 
25  std::string m_daq_id;
26 };
27 
28 
29 
36 class StateMachine {
37  public:
43  explicit StateMachine(Context& ctx,
44  std::string const& model_file,
45  std::list<scxml4cpp::Action*>& actions,
46  std::list<scxml4cpp::Activity*>& activities);
47  ~StateMachine();
48 
50  StateMachine(StateMachine&&) = default;
52  StateMachine(StateMachine const&) = delete;
53  StateMachine& operator=(StateMachine const&) = delete;
54 
55 
56  void ProcessEvent(rad::AnyEvent const& ev);
57 
58  private:
59  Context& m_context;
60  scxml4cpp::EventQueue m_event_queue;
62  scxml4cpp::Executor m_executor;
63 
64 };
65 
66 class EventRegistry {
67 public:
68  EventRegistry(rad::Dispatcher& dispatcher);
70 
71  void RegisterEvents(std::vector<rad::EventInfo> const& events, StateMachine& sm);
72  void UnregisterEvents();
73 
75  std::vector<rad::Dispatcher::token_t> m_dispatcher_tokens;
76 };
77 
82 class DaqSmManager {
83 public:
85  Context m_context;
86  StateMachine m_sm;
87 };
88 
95 std::function<StateMachine(std::string)>
96 MakeStateMachineFactory(Context& ctx,
97  std::string const& model_file,
98  std::list<scxml4cpp::Action*>& actions,
99  std::list<scxml4cpp::Activity*>& activities);
100 
101 }
102 #endif // #ifndef OCM_SERVER_DAQ_STATE_MACHINE_HPP
Context m_context
Definition: stateMachine.hpp:85
void RegisterEvents(std::vector< rad::EventInfo > const &events, StateMachine &sm)
Definition: stateMachine.cpp:48
Definition: Executor.h:67
StateMachine(Context &ctx, std::string const &model_file, std::list< scxml4cpp::Action * > &actions, std::list< scxml4cpp::Activity * > &activities)
Definition: stateMachine.cpp:12
void UnregisterEvents()
Definition: stateMachine.cpp:60
Definition: ActionMgr.hpp:38
Definition: StateMachine.h:44
EventRegistry(rad::Dispatcher &dispatcher)
Definition: stateMachine.cpp:38
Definition: Context.h:43
std::string m_daq_id
Definition: stateMachine.hpp:25
rad::ActionMgr m_action_mgr
Definition: stateMachine.hpp:84
std::vector< rad::Dispatcher::token_t > m_dispatcher_tokens
Definition: stateMachine.hpp:75
Context()
Definition: Context.cpp:32
StateMachine & operator=(StateMachine const &)=delete
Definition: Dispatcher.hpp:22
StateMachine m_sm
Definition: stateMachine.hpp:86
Definition: EventQueue.h:44
void ProcessEvent(rad::AnyEvent const &ev)
Definition: stateMachine.cpp:66
Definition: AnyEvent.hpp:55
std::function< StateMachine(std::string)> MakeStateMachineFactory(Context &ctx, std::string const &model_file, std::list< scxml4cpp::Action * > &actions, std::list< scxml4cpp::Activity * > &activities)
~EventRegistry()
Definition: stateMachine.cpp:41
~StateMachine()
Definition: stateMachine.cpp:30
rad::Dispatcher & m_dispatcher
Definition: stateMachine.hpp:74