1 #ifndef _ots_RunControlStateMachine_h_
2 #define _ots_RunControlStateMachine_h_
4 #include "otsdaq/FiniteStateMachine/FiniteStateMachine.h"
5 #include "otsdaq/ProgressBar/ProgressBar.h"
9 #include "toolbox/lang/Class.h"
22 void setStateMachineName(
const std::string& name)
24 theStateMachine_.setStateMachineName(name);
26 const std::string& getErrorMessage(
void)
const
28 return theStateMachine_.getErrorMessage();
30 void setAsyncPauseExceptionMessage(
const std::string& error)
32 asyncPauseExceptionReceived_ =
true;
33 theStateMachine_.setErrorMessage(error);
35 void setAsyncStopExceptionMessage(
const std::string& error)
37 asyncStopExceptionReceived_ =
true;
38 theStateMachine_.setErrorMessage(error);
41 template<
class OBJECT>
42 void addStateTransition(toolbox::fsm::State from,
43 toolbox::fsm::State to,
44 const std::string& input,
45 const std::string& transitionName,
47 void (OBJECT::*func)(toolbox::Event::Reference))
50 stateTransitionFunctionTable_[from][input] = func;
51 theStateMachine_.addStateTransition(from, to, input, transitionName, obj, func);
54 template<
class OBJECT>
55 void addStateTransition(toolbox::fsm::State from,
56 toolbox::fsm::State to,
57 const std::string& input,
58 const std::string& transitionName,
59 const std::string& transitionParameter,
61 void (OBJECT::*func)(toolbox::Event::Reference))
64 stateTransitionFunctionTable_[from][input] = func;
65 theStateMachine_.addStateTransition(
66 from, to, input, transitionName, transitionParameter, obj, func);
75 virtual void stateInitial(toolbox::fsm::FiniteStateMachine& ) { ; }
82 virtual void statePaused(toolbox::fsm::FiniteStateMachine& ) { ; }
89 virtual void stateRunning(toolbox::fsm::FiniteStateMachine& ) { ; }
95 virtual void stateHalted(toolbox::fsm::FiniteStateMachine& ) { ; }
107 virtual void inError(toolbox::fsm::FiniteStateMachine& ) { ; }
109 virtual void transitionConfiguring(toolbox::Event::Reference ) { ; }
110 virtual void transitionHalting(toolbox::Event::Reference ) { ; }
111 virtual void transitionShuttingDown(toolbox::Event::Reference ) { ; }
112 virtual void transitionStartingUp(toolbox::Event::Reference ) { ; }
113 virtual void transitionInitializing(toolbox::Event::Reference ) { ; }
114 virtual void transitionPausing(toolbox::Event::Reference ) { ; }
115 virtual void transitionResuming(toolbox::Event::Reference ) { ; }
116 virtual void transitionStarting(toolbox::Event::Reference ) { ; }
117 virtual void transitionStopping(toolbox::Event::Reference ) { ; }
118 virtual void enteringError(toolbox::Event::Reference ) { ; }
123 static const std::string FAILED_STATE_NAME;
124 static const std::string INITIAL_STATE_NAME;
125 static const std::string HALTED_STATE_NAME;
126 static const std::string PAUSED_STATE_NAME;
127 static const std::string RUNNING_STATE_NAME;
128 static const std::string SHUTDOWN_STATE_NAME;
129 static const std::string CONFIGURED_STATE_NAME;
131 static const std::string SHUTDOWN_TRANSITION_NAME;
132 static const std::string STARTUP_TRANSITION_NAME;
133 static const std::string INIT_TRANSITION_NAME;
134 static const std::string ERROR_TRANSITION_NAME;
135 static const std::string FAIL_TRANSITION_NAME;
136 static const std::string CONFIGURE_TRANSITION_NAME;
137 static const std::string HALT_TRANSITION_NAME;
138 static const std::string ABORT_TRANSITION_NAME;
139 static const std::string PAUSE_TRANSITION_NAME;
140 static const std::string RESUME_TRANSITION_NAME;
141 static const std::string START_TRANSITION_NAME;
142 static const std::string STOP_TRANSITION_NAME;
144 unsigned int getIterationIndex(
void) {
return iterationIndex_; }
145 unsigned int getSubIterationIndex(
void) {
return subIterationIndex_; }
146 void indicateIterationWork(
void) { iterationWorkFlag_ =
true; }
147 void clearIterationWork(
void) { iterationWorkFlag_ =
false; }
148 bool getIterationWork(
void) {
return iterationWorkFlag_; }
149 void indicateSubIterationWork(
void) { subIterationWorkFlag_ =
true; }
150 void clearSubIterationWork(
void) { subIterationWorkFlag_ =
false; }
151 bool getSubIterationWork(
void) {
return subIterationWorkFlag_; }
152 const std::string& getLastCommand(
void) {
return lastIterationCommand_; }
153 const std::string& getLastAttemptedConfigureGroup(
void)
155 return lastAttemptedConfigureGroup_;
159 FiniteStateMachine theStateMachine_;
160 ProgressBar theProgressBar_;
162 std::atomic<bool> asyncFailureReceived_{
false};
163 std::atomic<bool> asyncPauseExceptionReceived_{
false};
164 std::atomic<bool> asyncStopExceptionReceived_{
false};
166 unsigned int iterationIndex_ = 0, subIterationIndex_ = 0;
167 bool iterationWorkFlag_, subIterationWorkFlag_;
169 toolbox::fsm::State lastIterationState_;
170 std::string lastIterationCommand_;
171 std::string lastAttemptedConfigureGroup_;
172 std::string lastIterationResult_;
173 unsigned int lastIterationIndex_, lastSubIterationIndex_;
175 std::map<toolbox::fsm::State,
176 std::map<std::string,
177 void (RunControlStateMachine::*)(toolbox::Event::Reference),
178 std::less<std::string> > >
179 stateTransitionFunctionTable_;
virtual void statePaused(toolbox::fsm::FiniteStateMachine &)
virtual void stateConfigured(toolbox::fsm::FiniteStateMachine &)
virtual void stateRunning(toolbox::fsm::FiniteStateMachine &)
virtual void stateShutdown(toolbox::fsm::FiniteStateMachine &)
xoap::MessageReference runControlMessageHandler(xoap::MessageReference message)
Run Control Messages.
virtual void stateInitial(toolbox::fsm::FiniteStateMachine &)
virtual void stateHalted(toolbox::fsm::FiniteStateMachine &)
defines used also by OtsConfigurationWizardSupervisor