1 #ifndef _ots_RunControlStateMachine_h_
2 #define _ots_RunControlStateMachine_h_
4 #include "otsdaq/FiniteStateMachine/FiniteStateMachine.h"
5 #include "otsdaq/ProgressBar/ProgressBar.h"
8 #include "toolbox/lang/Class.h"
21 void setStateMachineName(
const std::string& name)
23 theStateMachine_.setStateMachineName(name);
25 const std::string& getErrorMessage(
void)
const
27 return theStateMachine_.getErrorMessage();
29 void setAsyncPauseExceptionMessage(
const std::string& error)
31 asyncPauseExceptionReceived_ =
true;
32 theStateMachine_.setErrorMessage(error);
34 void setAsyncStopExceptionMessage(
const std::string& error)
36 asyncStopExceptionReceived_ =
true;
37 theStateMachine_.setErrorMessage(error);
40 template<
class OBJECT>
41 void addStateTransition(toolbox::fsm::State from,
42 toolbox::fsm::State to,
43 const std::string& input,
44 const std::string& transitionName,
46 void (OBJECT::*func)(toolbox::Event::Reference))
49 stateTransitionFunctionTable_[from][input] = func;
50 theStateMachine_.addStateTransition(from, to, input, transitionName, obj, func);
53 template<
class OBJECT>
54 void addStateTransition(toolbox::fsm::State from,
55 toolbox::fsm::State to,
56 const std::string& input,
57 const std::string& transitionName,
58 const std::string& transitionParameter,
60 void (OBJECT::*func)(toolbox::Event::Reference))
63 stateTransitionFunctionTable_[from][input] = func;
64 theStateMachine_.addStateTransition(
65 from, to, input, transitionName, transitionParameter, obj, func);
74 virtual void stateInitial(toolbox::fsm::FiniteStateMachine& ) { ; }
81 virtual void statePaused(toolbox::fsm::FiniteStateMachine& ) { ; }
88 virtual void stateRunning(toolbox::fsm::FiniteStateMachine& ) { ; }
94 virtual void stateHalted(toolbox::fsm::FiniteStateMachine& ) { ; }
106 virtual void inError(toolbox::fsm::FiniteStateMachine& ) { ; }
108 virtual void transitionConfiguring(toolbox::Event::Reference ) { ; }
109 virtual void transitionHalting(toolbox::Event::Reference ) { ; }
110 virtual void transitionShuttingDown(toolbox::Event::Reference ) { ; }
111 virtual void transitionStartingUp(toolbox::Event::Reference ) { ; }
112 virtual void transitionInitializing(toolbox::Event::Reference ) { ; }
113 virtual void transitionPausing(toolbox::Event::Reference ) { ; }
114 virtual void transitionResuming(toolbox::Event::Reference ) { ; }
115 virtual void transitionStarting(toolbox::Event::Reference ) { ; }
116 virtual void transitionStopping(toolbox::Event::Reference ) { ; }
117 virtual void enteringError(toolbox::Event::Reference ) { ; }
122 static const std::string FAILED_STATE_NAME;
123 static const std::string INITIAL_STATE_NAME;
124 static const std::string HALTED_STATE_NAME;
125 static const std::string PAUSED_STATE_NAME;
126 static const std::string RUNNING_STATE_NAME;
127 static const std::string SHUTDOWN_STATE_NAME;
128 static const std::string CONFIGURED_STATE_NAME;
130 static const std::string SHUTDOWN_TRANSITION_NAME;
131 static const std::string STARTUP_TRANSITION_NAME;
132 static const std::string INIT_TRANSITION_NAME;
133 static const std::string ERROR_TRANSITION_NAME;
134 static const std::string FAIL_TRANSITION_NAME;
135 static const std::string CONFIGURE_TRANSITION_NAME;
136 static const std::string HALT_TRANSITION_NAME;
137 static const std::string ABORT_TRANSITION_NAME;
138 static const std::string PAUSE_TRANSITION_NAME;
139 static const std::string RESUME_TRANSITION_NAME;
140 static const std::string START_TRANSITION_NAME;
141 static const std::string STOP_TRANSITION_NAME;
143 unsigned int getIterationIndex(
void) {
return iterationIndex_; }
144 unsigned int getSubIterationIndex(
void) {
return subIterationIndex_; }
145 void indicateIterationWork(
void) { iterationWorkFlag_ =
true; }
146 void clearIterationWork(
void) { iterationWorkFlag_ =
false; }
147 bool getIterationWork(
void) {
return iterationWorkFlag_; }
148 void indicateSubIterationWork(
void) { subIterationWorkFlag_ =
true; }
149 void clearSubIterationWork(
void) { subIterationWorkFlag_ =
false; }
150 bool getSubIterationWork(
void) {
return subIterationWorkFlag_; }
151 const std::string& getLastCommand(
void) {
return lastIterationCommand_; }
152 const std::string& getLastAttemptedConfigureGroup(
void)
154 return lastAttemptedConfigureGroup_;
158 FiniteStateMachine theStateMachine_;
159 ProgressBar theProgressBar_;
161 volatile bool asyncFailureReceived_, asyncPauseExceptionReceived_,
162 asyncStopExceptionReceived_;
164 unsigned int iterationIndex_ = 0, subIterationIndex_ = 0;
165 bool iterationWorkFlag_, subIterationWorkFlag_;
167 toolbox::fsm::State lastIterationState_;
168 std::string lastIterationCommand_;
169 std::string lastAttemptedConfigureGroup_;
170 std::string lastIterationResult_;
171 unsigned int lastIterationIndex_, lastSubIterationIndex_;
173 std::map<toolbox::fsm::State,
174 std::map<std::string,
175 void (RunControlStateMachine::*)(toolbox::Event::Reference),
176 std::less<std::string> > >
177 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 &)