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

Last change on this file since 13981 was 13835, checked in by tbretz, 13 years ago
Removed targetstate stuff; derived from DimInfoHandler; added infoHandler which will post the received data as events to the event loop.
File size: 2.7 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 DimServer::start(name.c_str());
38 sleep(1);
39 }
40 ~DimStart()
41 {
42 DimServer::stop();
43 }
44};
45
46// ***************************************************************************
47/**
48 @class StateMachineDim
49
50 @brief Class for a state machine implementation within a DIM network
51
52**/
53// ***************************************************************************
54#include "StateMachine.h" // StateMachien
55
56class StateMachineDim : public DimCommandHandler, public DimInfoHandler, public DimLog, public DimStart, public StateMachineImp
57{
58private:
59 static const int fVersion; /// Version number
60
61 DimDescribedService fDescriptionStates; /// DimService propagating the state descriptions
62 DimDescribedService fSrvState; /// DimService offering fCurrentState
63// DimService fSrvVersion; /// DimService offering fVersion
64
65
66 void exitHandler(int code); /// Overwritten DimCommand::exitHandler.
67 void commandHandler(); /// Overwritten DimCommand::commandHandler
68 void infoHandler(); /// Overwritten DimInfo::infoHandler
69
70 EventImp *CreateEvent(const char *name, const char *fmt);
71 EventImp *CreateService(const char *name);
72
73protected:
74 /// This is an internal function to do some action in case of
75 /// a state change, like updating the corresponding service.
76 std::string SetCurrentState(int state, const char *txt="", const std::string &cmd="");
77
78 void Lock();
79 void UnLock();
80
81public:
82 StateMachineDim(std::ostream &out=std::cout, const std::string &name="DEFAULT");
83
84 /// Redirect our own logging to fLog
85 int Write(const Time &time, const std::string &txt, int qos=kMessage);
86
87 void AddStateName(const int state, const std::string &name, const std::string &doc="");
88};
89
90#endif
Note: See TracBrowser for help on using the repository browser.