tdaq-develop-2025-02-12
FiniteStateMachine.h
1 #ifndef _ots_FiniteStateMachine_h
2 #define _ots_FiniteStateMachine_h
3 
4 #include <toolbox/fsm/FiniteStateMachine.h>
5 #include <xoap/MessageReference.h>
6 
7 // clang-format off
8 namespace ots
9 {
10 class FiniteStateMachine : public toolbox::fsm::FiniteStateMachine
11 {
12  public:
13  FiniteStateMachine (const std::string& stateMachineName);
14  ~FiniteStateMachine (void);
15 
16  using toolbox::fsm::FiniteStateMachine::addStateTransition;
17 
18  template<class OBJECT>
19  void addStateTransition(toolbox::fsm::State from,
20  toolbox::fsm::State to,
21  const std::string& input,
22  const std::string& transitionName,
23  OBJECT* obj,
24  void (OBJECT::*func)(toolbox::Event::Reference))
25 
26  {
27  stateTransitionNameTable_[from][input] = transitionName;
28  toolbox::fsm::FiniteStateMachine::addStateTransition(from, to, input, obj, func);
29  }
30 
31  template<class OBJECT>
32  void addStateTransition (toolbox::fsm::State from,
33  toolbox::fsm::State to,
34  const std::string& input,
35  const std::string& transitionName,
36  const std::string& transitionParameter,
37  OBJECT* obj,
38  void (OBJECT::*func)(toolbox::Event::Reference))
39 
40  {
41  stateTransitionParameterTable_[from][input] = transitionParameter;
42  addStateTransition(from, to, input, transitionName, obj, func);
43  }
44 
45  toolbox::fsm::State getProvenanceState (void);
46  toolbox::fsm::State getTransitionFinalState (const std::string& transition);
47 
48  std::string getProvenanceStateName (void);
49  std::string getCurrentStateName (void);
50  time_t getTimeInState (void) const;
51  std::string getCurrentTransitionName (const std::string& transition = "");
52  std::string getTransitionName (const toolbox::fsm::State from, const std::string& transition);
53  std::string getTransitionParameter (const toolbox::fsm::State from, const std::string& transition);
54  std::string getTransitionFinalStateName (const std::string& transition);
55  const std::string& getErrorMessage (void) const;
56  const std::string& getStateMachineName (void) const { return stateMachineName_; }
57  void setStateMachineName (const std::string& name) { stateMachineName_ = name; }
58 
59  const xoap::MessageReference& getCurrentMessage (void) { return theMessage_; }
60 
61  bool execTransition (const std::string& transition);
62  bool execTransition (const std::string& transition, const xoap::MessageReference& message);
63  bool isInTransition (void);
64  void setInitialState (toolbox::fsm::State state);
65  void setErrorMessage (const std::string& errMessage, bool append = true);
66 
67  static const std::string FAILED_STATE_NAME, ERROR_TRANSITION_NAME;
68  static const char FAILED_STATE;
69  protected:
70  time_t stateEntranceTime_;
71 
81  volatile bool inTransition_;
82  toolbox::fsm::State provenanceState_;
83  std::string currentTransition_;
84  std::map<toolbox::fsm::State,
85  std::map<std::string, std::string,
86  std::less<std::string> > > stateTransitionNameTable_;
87  std::map<toolbox::fsm::State,
88  std::map<std::string, std::string,
89  std::less<std::string> > > stateTransitionParameterTable_;
90 
91  xoap::MessageReference theMessage_;
92  std::string theErrorMessage_;
93  std::string stateMachineName_;
94 
95 
96  private:
97 };
98 // clang-format on
99 } // namespace ots
100 
101 #endif
time_t getTimeInState(void) const