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>
47 friend class MacroMakerSupervisor;
56 const unsigned int getSupervisorLID(
void)
const
58 return getApplicationDescriptor()->getLocalId();
68 virtual void defaultPage(xgi::Input* in, xgi::Output* out);
69 virtual void request(
const std::string& requestType,
73 virtual void nonXmlRequest(
const std::string& requestType,
79 xoap::MessageReference workLoopStatusRequestWrapper(xoap::MessageReference message);
80 void defaultPageWrapper(xgi::Input* in, xgi::Output* out);
81 void requestWrapper(xgi::Input* in, xgi::Output* out);
85 void stateMachineXgiHandler(xgi::Input* in, xgi::Output* out);
86 void stateMachineResultXgiHandler(xgi::Input* in, xgi::Output* out);
87 xoap::MessageReference stateMachineXoapHandler(xoap::MessageReference message);
88 xoap::MessageReference stateMachineResultXoapHandler(xoap::MessageReference message);
90 xoap::MessageReference stateMachineStateRequest(xoap::MessageReference message);
91 xoap::MessageReference stateMachineErrorMessageRequest(
92 xoap::MessageReference message);
94 virtual xoap::MessageReference workLoopStatusRequest(xoap::MessageReference message);
96 bool stateMachineThread(toolbox::task::WorkLoop* workLoop);
98 virtual void stateInitial(toolbox::fsm::FiniteStateMachine& fsm);
99 virtual void statePaused(toolbox::fsm::FiniteStateMachine& fsm);
100 virtual void stateRunning(toolbox::fsm::FiniteStateMachine& fsm);
101 virtual void stateHalted(toolbox::fsm::FiniteStateMachine& fsm);
102 virtual void stateConfigured(toolbox::fsm::FiniteStateMachine& fsm);
103 virtual void inError(toolbox::fsm::FiniteStateMachine& fsm);
105 virtual void transitionConfiguring(toolbox::Event::Reference e);
106 virtual void transitionHalting(toolbox::Event::Reference e);
107 virtual void transitionInitializing(toolbox::Event::Reference e);
108 virtual void transitionPausing(toolbox::Event::Reference e);
109 virtual void transitionResuming(toolbox::Event::Reference e);
110 virtual void transitionStarting(toolbox::Event::Reference e);
111 virtual void transitionStopping(toolbox::Event::Reference e);
112 virtual void enteringError(toolbox::Event::Reference e);
114 static const std::string WORK_LOOP_DONE, WORK_LOOP_WORKING;
118 toolbox::BSem stateMachineSemaphore_;
119 std::vector<VStateMachine*> theStateMachineImplementation_;
122 std::vector<bool> stateMachinesIterationDone_;
123 unsigned int stateMachinesIterationWorkCount_;
124 unsigned int subIterationWorkStateMachineIndex_;
125 void preStateMachineExecution(
unsigned int i);
126 void postStateMachineExecution(
unsigned int i);
127 void preStateMachineExecutionLoop(
void);
128 void postStateMachineExecutionLoop(
void);