]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig/parser.h
Optimized sending answers in sgconfig.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser.h
1  /*
2  $Revision: 1.20 $
3  $Date: 2010/10/04 20:26:10 $
4  $Author: faust $
5  */
6
7 #ifndef PARSER_H
8 #define PARSER_H
9
10 #include "stg/resetable.h"
11 #include "stg/const.h"
12 #include "stg/store.h"
13 #include "stg/admins.h"
14 #include "stg/admin.h"
15 #include "stg/users.h"
16 #include "stg/message.h"
17
18 #include <string>
19 #include <vector>
20
21 class TARIFFS;
22 class SETTINGS;
23
24 //-----------------------------------------------------------------------------
25 class BASE_PARSER {
26 public:
27     BASE_PARSER()
28         : strError(),
29           admins(NULL),
30           users(NULL),
31           tariffs(NULL),
32           store(NULL),
33           settings(NULL),
34           currAdmin(NULL),
35           depth(0)
36     {}
37     virtual ~BASE_PARSER() {}
38     virtual int ParseStart(void *data, const char *el, const char **attr) = 0;
39     virtual int ParseEnd(void *data, const char *el) = 0;
40     virtual void Reset() { answer.clear(); depth = 0; }
41
42     void SetUsers(USERS * u) { users = u; }
43     void SetAdmins(ADMINS * a) { admins = a; }
44     void SetTariffs(TARIFFS * t) { tariffs = t; }
45     void SetStore(STORE * s) { store = s; }
46     void SetStgSettings(const SETTINGS * s) { settings = s; }
47
48     void SetCurrAdmin(ADMIN & cua) { currAdmin = &cua; }
49     const std::string & GetStrError() const { return strError; }
50     const std::string & GetAnswer() const { return answer; }
51
52 protected:
53     BASE_PARSER(const BASE_PARSER & rvalue);
54     BASE_PARSER & operator=(const BASE_PARSER & rvalue);
55
56     std::string      strError;
57     ADMINS *         admins;
58     USERS *          users;
59     TARIFFS *        tariffs;
60     STORE *          store;
61     const SETTINGS * settings;
62     ADMIN          * currAdmin;
63     int              depth;
64     std::string      answer;
65 };
66 //-----------------------------------------------------------------------------
67 class PARSER_GET_ADMINS: public BASE_PARSER {
68 public:
69     int ParseStart(void *data, const char *el, const char **attr);
70     int ParseEnd(void *data, const char *el);
71
72 private:
73     void CreateAnswer();
74 };
75 //-----------------------------------------------------------------------------
76 class PARSER_ADD_ADMIN: public BASE_PARSER {
77 public:
78         PARSER_ADD_ADMIN() : BASE_PARSER(), adminToAdd() {}
79     int ParseStart(void *data, const char *el, const char **attr);
80     int ParseEnd(void *data, const char *el);
81
82 private:
83     std::string adminToAdd;
84
85     void CreateAnswer();
86 };
87 //-----------------------------------------------------------------------------
88 class PARSER_DEL_ADMIN: public BASE_PARSER {
89 public:
90         PARSER_DEL_ADMIN() : BASE_PARSER(), adminToDel() {}
91     int ParseStart(void *data, const char *el, const char **attr);
92     int ParseEnd(void *data, const char *el);
93
94 private:
95     std::string adminToDel;
96
97     void CreateAnswer();
98 };
99 //-----------------------------------------------------------------------------
100 class PARSER_CHG_ADMIN: public BASE_PARSER {
101 public:
102         PARSER_CHG_ADMIN() : BASE_PARSER(), login(), password(), privAsString() {}
103     int ParseStart(void *data, const char *el, const char **attr);
104     int ParseEnd(void *data, const char *el);
105
106 private:
107     RESETABLE<std::string> login;
108     RESETABLE<std::string> password;
109     RESETABLE<std::string> privAsString;
110
111     void CreateAnswer();
112 };
113 //-----------------------------------------------------------------------------
114 class PARSER_GET_SERVER_INFO: public BASE_PARSER {
115 public:
116     int ParseStart(void *data, const char *el, const char **attr);
117     int ParseEnd(void *data, const char *el);
118
119 private:
120     void CreateAnswer();
121 };
122 //-----------------------------------------------------------------------------
123 class PARSER_GET_USER: public BASE_PARSER {
124 public:
125         PARSER_GET_USER() : BASE_PARSER(), login() {}
126         ~PARSER_GET_USER() {}
127     int ParseStart(void *data, const char *el, const char **attr);
128     int ParseEnd(void *data, const char *el);
129
130 private:
131     std::string login;
132
133     void CreateAnswer();
134 };
135 //-----------------------------------------------------------------------------
136 class PARSER_GET_USERS: public BASE_PARSER {
137 public:
138         PARSER_GET_USERS() : BASE_PARSER(), lastUserUpdateTime(0), lastUpdateFound(false) {}
139     int ParseStart(void *data, const char *el, const char **attr);
140     int ParseEnd(void *data, const char *el);
141
142 private:
143     time_t lastUserUpdateTime;
144     bool lastUpdateFound;
145
146     void CreateAnswer();
147 };
148 //-----------------------------------------------------------------------------
149 class PARSER_GET_TARIFFS: public BASE_PARSER {
150 public:
151     int ParseStart(void *data, const char *el, const char **attr);
152     int ParseEnd(void *data, const char *el);
153
154 private:
155     void CreateAnswer();
156 };
157 //-----------------------------------------------------------------------------
158 class PARSER_ADD_TARIFF: public BASE_PARSER {
159 public:
160         PARSER_ADD_TARIFF() : BASE_PARSER(), tariffToAdd() {}
161     int ParseStart(void *data, const char *el, const char **attr);
162     int ParseEnd(void *data, const char *el);
163
164 private:
165     std::string tariffToAdd;
166
167     void CreateAnswer();
168 };
169 //-----------------------------------------------------------------------------
170 class PARSER_DEL_TARIFF: public BASE_PARSER {
171 public:
172         PARSER_DEL_TARIFF() : BASE_PARSER(), tariffToDel() {}
173     int ParseStart(void *data, const char *el, const char **attr);
174     int ParseEnd(void *data, const char *el);
175
176 private:
177     std::string tariffToDel;
178
179     void CreateAnswer();
180 };
181 //-----------------------------------------------------------------------------
182 class PARSER_CHG_TARIFF: public BASE_PARSER {
183 public:
184         PARSER_CHG_TARIFF() : BASE_PARSER(), td() {}
185     int ParseStart(void *data, const char *el, const char **attr);
186     int ParseEnd(void *data, const char *el);
187
188 private:
189     TARIFF_DATA_RES td;
190
191     int ParseSlashedIntParams(int paramsNum, const std::string & s, int * params);
192     int ParseSlashedDoubleParams(int paramsNum, const std::string & s, double * params);
193     int CheckTariffData();
194     int AplayChanges();
195     void CreateAnswer();
196 };
197 //-----------------------------------------------------------------------------/
198 class PARSER_ADD_USER: public BASE_PARSER {
199 public:
200         PARSER_ADD_USER() : BASE_PARSER(), login() {}
201         ~PARSER_ADD_USER() {}
202     int ParseStart(void *data, const char *el, const char **attr);
203     int ParseEnd(void *data, const char *el);
204
205 private:
206     std::string login;
207
208     int CheckUserData();
209     void CreateAnswer();
210     void Reset();
211 };
212 //-----------------------------------------------------------------------------
213 class PARSER_CHG_USER: public BASE_PARSER {
214 public:
215         PARSER_CHG_USER();
216         ~PARSER_CHG_USER();
217     int ParseStart(void *data, const char *el, const char **attr);
218     int ParseEnd(void *data, const char *el);
219
220 private:
221     USER_STAT_RES * usr;
222     USER_CONF_RES * ucr;
223     RESETABLE<uint64_t> * upr;
224     RESETABLE<uint64_t> * downr;
225     std::string cashMsg;
226     std::string login;
227     bool cashMustBeAdded;
228     int res;
229
230     PARSER_CHG_USER(const PARSER_CHG_USER & rvalue);
231     PARSER_CHG_USER & operator=(const PARSER_CHG_USER & rvalue);
232
233     std::string EncChar2String(const char *);
234     int AplayChanges();
235     void CreateAnswer();
236     void Reset();
237 };
238 //-----------------------------------------------------------------------------
239 class PARSER_DEL_USER: public BASE_PARSER {
240 public:
241         PARSER_DEL_USER() : BASE_PARSER(), res(0), u(NULL) {}
242     int ParseStart(void *data, const char *el, const char **attr);
243     int ParseEnd(void *data, const char *el);
244
245 private:
246     int res;
247     USER * u;
248
249     PARSER_DEL_USER(const PARSER_DEL_USER & rvalue);
250     PARSER_DEL_USER & operator=(const PARSER_DEL_USER & rvalue);
251
252     void CreateAnswer();
253 };
254 //-----------------------------------------------------------------------------
255 class PARSER_CHECK_USER: public BASE_PARSER {
256 public:
257         PARSER_CHECK_USER() : BASE_PARSER() {}
258     int ParseStart(void *data, const char *el, const char **attr);
259     int ParseEnd(void *data, const char *el);
260
261 private:
262     void CreateAnswer(const char * error);
263 };
264 //-----------------------------------------------------------------------------
265 class PARSER_SEND_MESSAGE: public BASE_PARSER {
266 public:
267         PARSER_SEND_MESSAGE() : BASE_PARSER(), logins(), result(0), msg(), u(NULL) {}
268     int ParseStart(void *data, const char *el, const char **attr);
269     int ParseEnd(void *data, const char *el);
270
271 private:
272     enum {res_ok, res_params_error, res_unknown};
273     std::vector<std::string> logins;
274     int result;
275     STG_MSG msg;
276     USER * u;
277
278     PARSER_SEND_MESSAGE(const PARSER_SEND_MESSAGE & rvalue);
279     PARSER_SEND_MESSAGE & operator=(const PARSER_SEND_MESSAGE & rvalue);
280
281     int ParseLogins(const char * logins);
282     void CreateAnswer();
283 };
284 //-----------------------------------------------------------------------------
285 #endif //PARSER_H