1 | #ifndef FACT_StateMachineDimControl
|
---|
2 | #define FACT_StateMachineDimControl
|
---|
3 |
|
---|
4 | #include <set>
|
---|
5 |
|
---|
6 | #include "DimState.h"
|
---|
7 | #include "StateMachineDim.h"
|
---|
8 |
|
---|
9 | class Configuration;
|
---|
10 |
|
---|
11 | class StateMachineDimControl : public StateMachineDim
|
---|
12 | {
|
---|
13 | std::mutex fMutex;
|
---|
14 |
|
---|
15 | std::vector<DimDescriptions*> fDimDescriptionsList;
|
---|
16 |
|
---|
17 | std::set<std::string> fServerList;
|
---|
18 | std::set<Service> fServiceList;
|
---|
19 | std::map<std::string, std::vector<std::string>> fCommandList;
|
---|
20 | std::map<std::string, State> fCurrentStateList;
|
---|
21 | std::map<std::pair<std::string, int32_t>, std::pair<std::string, std::string>> fStateDescriptionList;
|
---|
22 | std::map<std::string, std::vector<Description>> fServiceDescriptionList;
|
---|
23 |
|
---|
24 | std::function<void(const std::string &, const State&)> fStateCallback;
|
---|
25 |
|
---|
26 | DimVersion fDim;
|
---|
27 | DimDnsServiceList fDimList;
|
---|
28 |
|
---|
29 | int fVerbosity;
|
---|
30 | bool fDebug;
|
---|
31 |
|
---|
32 | std::string fUser;
|
---|
33 | std::string fScriptUser;
|
---|
34 |
|
---|
35 | /// Default arguments provided to every java script
|
---|
36 | std::string fArgumentsJS;
|
---|
37 |
|
---|
38 | std::function<int(const EventImp &)> fInterruptHandler;
|
---|
39 |
|
---|
40 | std::string Line(const std::string &txt, char fill);
|
---|
41 |
|
---|
42 | public:
|
---|
43 | static bool fIsServer;
|
---|
44 |
|
---|
45 | int ChangeState(int qos, const Time &time, int scriptdepth, std::string scriptfile, std::string user);
|
---|
46 | int ChangeState(int state);
|
---|
47 |
|
---|
48 | int StartScript(const EventImp &imp, const std::string &cmd);
|
---|
49 | int StopScript(const EventImp &imp);
|
---|
50 | int InterruptScript(const EventImp &imp);
|
---|
51 |
|
---|
52 | int HandleStateChange(const std::string &server, DimDescriptions *state);
|
---|
53 | int HandleDescriptions(DimDescriptions *state);
|
---|
54 | int HandleStates(const std::string &server, DimDescriptions *state);
|
---|
55 | int HandleServerAdd(const std::string &server);
|
---|
56 | int HandleServerRemove(const std::string &server);
|
---|
57 | int HandleAddService(const Service &svc);
|
---|
58 |
|
---|
59 | bool HasServer(const std::string &server);
|
---|
60 |
|
---|
61 | std::vector<std::string> GetServerList();
|
---|
62 | std::vector<std::string> GetCommandList(const std::string &server);
|
---|
63 | std::vector<std::string> GetCommandList();
|
---|
64 | std::vector<Description> GetDescription(const std::string &service);
|
---|
65 | std::vector<State> GetStates(const std::string &server);
|
---|
66 | std::set<Service> GetServiceList();
|
---|
67 |
|
---|
68 | std::string GetArguments() const { return fArgumentsJS; }
|
---|
69 |
|
---|
70 | int PrintStates(std::ostream &out, const std::string &serv="");
|
---|
71 | int PrintDescription(std::ostream &out, bool iscmd, const std::string &serv="", const std::string &service="");
|
---|
72 |
|
---|
73 | State GetServerState(const std::string &server);
|
---|
74 |
|
---|
75 | bool SendDimCommand(const std::string &server, std::string str, std::ostream &lout);
|
---|
76 |
|
---|
77 | void SetStateCallback(const std::function<void(const std::string &, const State &)> &func) { fStateCallback = func; }
|
---|
78 |
|
---|
79 | void SetInterruptHandler(const std::function<int(const EventImp &)> &func=std::function<int(const EventImp &)>()) { fInterruptHandler = func; }
|
---|
80 |
|
---|
81 | void Stop(int code=0);
|
---|
82 |
|
---|
83 | public:
|
---|
84 | StateMachineDimControl(std::ostream &out=std::cout);
|
---|
85 | ~StateMachineDimControl();
|
---|
86 |
|
---|
87 | int EvalOptions(Configuration &conf);
|
---|
88 | };
|
---|
89 |
|
---|
90 | #endif
|
---|