1 #ifndef _ots_CoreSupervisorBase_h_
2 #define _ots_CoreSupervisorBase_h_
4 #include "otsdaq-core/FiniteStateMachine/RunControlStateMachine.h"
5 #include "otsdaq-core/SOAPUtilities/SOAPMessenger.h"
6 #include "otsdaq-core/WorkLoopManager/WorkLoopManager.h"
8 #include "otsdaq-core/CoreSupervisors/CorePropertySupervisorBase.h"
10 #include "otsdaq-core/CgiDataUtilities/CgiDataUtilities.h"
11 #include "otsdaq-core/SOAPUtilities/SOAPUtilities.h"
12 #include "otsdaq-core/XmlUtilities/HttpXmlDocument.h"
14 #include "otsdaq-core/FiniteStateMachine/VStateMachine.h"
16 #include "otsdaq-core/WebUsersUtilities/RemoteWebUsers.h"
18 #pragma GCC diagnostic push
19 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
20 #include <xdaq/Application.h>
21 #pragma GCC diagnostic pop
22 #include "otsdaq-core/Macros/XDAQApplicationMacros.h"
23 #include "xgi/Method.h"
25 #include <toolbox/fsm/FailedEvent.h>
27 #include <xdaq/NamespaceURI.h>
28 #include <xoap/Method.h>
54 const unsigned int getSupervisorLID(
void)
const {
return getApplicationDescriptor()->getLocalId(); }
63 virtual void defaultPage(xgi::Input* in, xgi::Output* out);
64 virtual void request(
const std::string& requestType,
68 virtual void nonXmlRequest(
const std::string& requestType,
74 xoap::MessageReference workLoopStatusRequestWrapper(xoap::MessageReference message);
75 void defaultPageWrapper(xgi::Input* in, xgi::Output* out);
76 void requestWrapper(xgi::Input* in, xgi::Output* out);
80 void stateMachineXgiHandler(xgi::Input* in, xgi::Output* out);
81 void stateMachineResultXgiHandler(xgi::Input* in, xgi::Output* out);
82 xoap::MessageReference stateMachineXoapHandler(xoap::MessageReference message);
83 xoap::MessageReference stateMachineResultXoapHandler(xoap::MessageReference message);
85 xoap::MessageReference stateMachineStateRequest(xoap::MessageReference message);
86 xoap::MessageReference stateMachineErrorMessageRequest(
87 xoap::MessageReference message);
89 virtual xoap::MessageReference workLoopStatusRequest(xoap::MessageReference message);
91 bool stateMachineThread(toolbox::task::WorkLoop* workLoop);
93 virtual void stateInitial(toolbox::fsm::FiniteStateMachine& fsm);
94 virtual void statePaused(toolbox::fsm::FiniteStateMachine& fsm);
95 virtual void stateRunning(toolbox::fsm::FiniteStateMachine& fsm);
96 virtual void stateHalted(toolbox::fsm::FiniteStateMachine& fsm);
97 virtual void stateConfigured(toolbox::fsm::FiniteStateMachine& fsm);
98 virtual void inError(toolbox::fsm::FiniteStateMachine& fsm);
100 virtual void transitionConfiguring(toolbox::Event::Reference e);
101 virtual void transitionHalting(toolbox::Event::Reference e);
102 virtual void transitionInitializing(toolbox::Event::Reference e);
103 virtual void transitionPausing(toolbox::Event::Reference e);
104 virtual void transitionResuming(toolbox::Event::Reference e);
105 virtual void transitionStarting(toolbox::Event::Reference e);
106 virtual void transitionStopping(toolbox::Event::Reference e);
107 virtual void enteringError(toolbox::Event::Reference e);
109 static const std::string WORK_LOOP_DONE, WORK_LOOP_WORKING;
113 toolbox::BSem stateMachineSemaphore_;
114 std::vector<VStateMachine*> theStateMachineImplementation_;
117 std::vector<bool> stateMachinesIterationDone_;
118 unsigned int stateMachinesIterationWorkCount_;
119 unsigned int subIterationWorkStateMachineIndex_;
120 void preStateMachineExecution(
unsigned int i);
121 void postStateMachineExecution(
unsigned int i);
122 void preStateMachineExecutionLoop(
void);
123 void postStateMachineExecutionLoop(
void);