source: trunk/FACT++/src/StateMachineDim.h@ 14552

Last change on this file since 14552 was 14070, checked in by tbretz, 12 years ago
Allow to instantiate the DimServer without a name. In this case the server is not started.
File size: 2.8 KB
Line 
1#ifndef FACT_StateMachineDim
2#define FACT_StateMachineDim
3
4// ***************************************************************************
5/**
6 @class DimLog
7
8 @brief Ensures that the MessageDimTX is initialized before errors could be redirected to it
9
10**/
11// ***************************************************************************
12#include "MessageDim.h" // MessageDimTX
13
14class DimLog
15{
16 friend class StateMachineDim;
17
18 MessageDimTX fLog;
19 DimLog(std::ostream &out, const std::string &name) : fLog(name, out) { }
20};
21
22// ***************************************************************************
23/**
24 @class DimStart
25
26 @brief Ensures calling DimServer::start() in its constructor and DimServer::stop() in its destructor
27
28**/
29// ***************************************************************************
30#include "DimErrorRedirecter.h"
31
32class DimStart : public DimErrorRedirecter
33{
34protected:
35 DimStart(const std::string &name, MessageImp &imp) : DimErrorRedirecter(imp)
36 {
37 if (!name.empty())
38 {
39 DimServer::start(name.c_str());
40 sleep(1);
41 }
42 }
43 ~DimStart()
44 {
45 DimServer::stop();
46 }
47};
48
49// ***************************************************************************
50/**
51 @class StateMachineDim
52
53 @brief Class for a state machine implementation within a DIM network
54
55**/
56// ***************************************************************************
57#include "StateMachine.h" // StateMachien
58
59class StateMachineDim : public DimCommandHandler, public DimInfoHandler, public DimLog, public DimStart, public StateMachineImp
60{
61private:
62 static const int fVersion; /// Version number
63
64 DimDescribedService fDescriptionStates; /// DimService propagating the state descriptions
65 DimDescribedService fSrvState; /// DimService offering fCurrentState
66// DimService fSrvVersion; /// DimService offering fVersion
67
68 void exitHandler(int code); /// Overwritten DimCommand::exitHandler.
69 void commandHandler(); /// Overwritten DimCommand::commandHandler
70 void infoHandler(); /// Overwritten DimInfo::infoHandler
71
72 EventImp *CreateEvent(const std::string &name, const std::string &fmt);
73 EventImp *CreateService(const std::string &name);
74
75protected:
76 /// This is an internal function to do some action in case of
77 /// a state change, like updating the corresponding service.
78 std::string SetCurrentState(int state, const char *txt="", const std::string &cmd="");
79
80 void Lock();
81 void UnLock();
82
83public:
84 StateMachineDim(std::ostream &out=std::cout, const std::string &name="DEFAULT");
85
86 /// Redirect our own logging to fLog
87 int Write(const Time &time, const std::string &txt, int qos=kMessage);
88
89 void AddStateName(const int state, const std::string &name, const std::string &doc="");
90};
91
92#endif
Note: See TracBrowser for help on using the repository browser.