1 #ifndef _ots_CoreSupervisorBase_h_
2 #define _ots_CoreSupervisorBase_h_
4 #include "otsdaq/FiniteStateMachine/RunControlStateMachine.h"
5 #include "otsdaq/SOAPUtilities/SOAPMessenger.h"
6 #include "otsdaq/WorkLoopManager/WorkLoopManager.h"
8 #include "otsdaq/CoreSupervisors/CorePropertySupervisorBase.h"
10 #include "otsdaq/CgiDataUtilities/CgiDataUtilities.h"
11 #include "otsdaq/SOAPUtilities/SOAPUtilities.h"
12 #include "otsdaq/XmlUtilities/HttpXmlDocument.h"
14 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
16 #include "otsdaq/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/Macros/XDAQApplicationMacros.h"
23 #include "xgi/Method.h"
25 #include <toolbox/fsm/FailedEvent.h>
27 #include <xdaq/NamespaceURI.h>
28 #include <xoap/Method.h>
49 friend class MacroMakerSupervisor;
58 const unsigned int getSupervisorLID(
void)
const {
return getApplicationDescriptor()->getLocalId(); }
67 virtual void defaultPage(xgi::Input* in, xgi::Output* out);
68 virtual void request(
const std::string& requestType,
72 virtual void nonXmlRequest(
const std::string& requestType,
78 xoap::MessageReference workLoopStatusRequestWrapper (xoap::MessageReference message);
79 void defaultPageWrapper (xgi::Input* in, xgi::Output* out);
80 void requestWrapper (xgi::Input* in, xgi::Output* out);
84 void stateMachineXgiHandler (xgi::Input* in, xgi::Output* out);
85 void stateMachineResultXgiHandler (xgi::Input* in, xgi::Output* out);
86 xoap::MessageReference stateMachineXoapHandler (xoap::MessageReference message);
87 xoap::MessageReference stateMachineResultXoapHandler (xoap::MessageReference message);
89 xoap::MessageReference stateMachineStateRequest (xoap::MessageReference message);
90 xoap::MessageReference stateMachineErrorMessageRequest (xoap::MessageReference message);
92 void sendAsyncErrorToGateway (
const std::string& errMsg,
bool isSoftError);
94 virtual xoap::MessageReference workLoopStatusRequest (xoap::MessageReference message);
95 virtual xoap::MessageReference applicationStatusRequest (xoap::MessageReference message);
97 bool stateMachineThread (toolbox::task::WorkLoop* workLoop);
99 virtual void stateInitial (toolbox::fsm::FiniteStateMachine& fsm);
100 virtual void statePaused (toolbox::fsm::FiniteStateMachine& fsm);
101 virtual void stateRunning (toolbox::fsm::FiniteStateMachine& fsm);
102 virtual void stateHalted (toolbox::fsm::FiniteStateMachine& fsm);
103 virtual void stateConfigured (toolbox::fsm::FiniteStateMachine& fsm);
104 virtual void inError (toolbox::fsm::FiniteStateMachine& fsm);
106 virtual void transitionConfiguring (toolbox::Event::Reference event);
107 virtual void transitionHalting (toolbox::Event::Reference event);
108 virtual void transitionInitializing (toolbox::Event::Reference event);
109 virtual void transitionPausing (toolbox::Event::Reference event);
110 virtual void transitionResuming (toolbox::Event::Reference event);
111 virtual void transitionStarting (toolbox::Event::Reference event);
112 virtual void transitionStopping (toolbox::Event::Reference event);
113 virtual void enteringError (toolbox::Event::Reference event);
115 static const std::string WORK_LOOP_DONE, WORK_LOOP_WORKING;
119 toolbox::BSem stateMachineSemaphore_;
120 std::vector<VStateMachine*> theStateMachineImplementation_;
123 std::vector<bool> stateMachinesIterationDone_;
124 unsigned int stateMachinesIterationWorkCount_;
125 unsigned int subIterationWorkStateMachineIndex_;
126 void preStateMachineExecution(
unsigned int i);
127 void postStateMachineExecution(
unsigned int i);
128 void preStateMachineExecutionLoop(
void);
129 void postStateMachineExecutionLoop(
void);