8e10ba106e012e3c7f41b80c91c48541b81da217
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

1) /*
2) 	
3) 	IRC-Bot "Kvasir"
4)     Copyright (C) 2016	Fenris Wolf (fenris@folksprak.org)
5) 	
6)     This program is free software: you can redistribute it and/or modify
7)     it under the terms of the GNU General Public License as published by
8)     the Free Software Foundation, either version 3 of the License, or
9)     (at your option) any later version.
10) 	
11)     This program is distributed in the hope that it will be useful,
12)     but WITHOUT ANY WARRANTY; without even the implied warranty of
13)     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14)     GNU General Public License for more details.
15) 	
16)     You should have received a copy of the GNU General Public License
17)     along with this program.  If not, see <http://www.gnu.org/licenses/>.
18)        
19) */
20) 
21) type tipo_ero = {kromajxo : klaso_kromajxo; aktiva : boolean;};
22) 
23) 
24) /**
25)  * @author fenris
26)  */
27) abstract class klaso_kliento
28) {
29) 	
30) 	/**
31) 	 * @author fenris
32) 	 */
33) 	protected kromajxoj : {[identigilo : string] : tipo_ero};
34) 	
35) 	
36) 	/**
37) 	 * @author fenris
38) 	 */
39) 	protected vico_eliga : klaso_vico<klaso_evento_eliga>;
40) 	
41) 	
42) 	/**
43) 	 * @author fenris
44) 	 */
45) 	protected prokrasto : int;
46) 	
47) 	
48) 	/**
49) 	 * @author fenris
50) 	 */
51) 	protected foo : any;
52) 	
53) 	
54) 	/**
55) 	 * @author fenris
56) 	 */
57) 	public constructor(prokrasto : int = null)
58) 	{
59) 		this.kromajxoj = {};
60) 		this.vico_eliga = new klaso_vico<klaso_evento_eliga>();
61) 		this.foo = null;
62) 		this.prokrasto = prokrasto;
63) 	}
64) 	
65) 	
66) 	/**
67) 	 * @author fenris
68) 	 */
69) 	public stirado_arangxi
70) 	(
71) 		permesuloj : Array<string> = []
72) 	)
73) 	{
74) 		let that : klaso_kliento = this;
75) 		this.kromajxo_aldoni
76) 		(
77) 			new klaso_kromajxo_stirado
78) 			(
79) 				permesuloj,
80) 				{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

81) 					"anigxi": function (kanalo : string, modo : boolean = true) : tipo_plenumanto<Array<string>, Error>
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

82) 					{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

83) 						return (
84) 							(akcepti, rifuzi) =>
85) 							{
86) 								that.anigxi_rekte(kanalo, modo);
87) 								akcepti([]);
88) 							}
89) 						)
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

90) 					},
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

91) 					"listigi": function () : tipo_plenumanto<Array<string>, Error>
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

92) 					{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

93) 						return (
94) 							(akcepti, rifuzi) =>
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

95) 							{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

96) 								let enhavo : string = Object.keys(that.kromajxoj).map(identigilo => (that.kromajxoj[identigilo].aktiva ? "+" : "-") + identigilo).join(", ");
97) 								akcepti([enhavo]);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

98) 							}
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

99) 						);
100) 					},
101) 					"detaloj": function (identigilo : string) : tipo_plenumanto<Array<string>, Error>
102) 					{
103) 						return (
104) 							(akcepti, rifuzi) =>
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

105) 							{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

106) 								if (identigilo in that.kromajxoj)
107) 								{
108) 									let ero : tipo_ero = that.kromajxoj[identigilo];
109) 									let linioj : Array<string> =
110) 									[
111) 										{"titolo": "nomo", "valoro": ero.kromajxo.nomo_legi()},
112) 										{"titolo": "auxtoro", "valoro": ero.kromajxo.auxtoro_legi()},
113) 										{"titolo": "priskribo", "valoro": ero.kromajxo.priskribo_legi()},
114) 										{"titolo": "uzo", "valoro": ero.kromajxo.uzo_legi()},
115) 										{"titolo": "aktiva", "valoro": (ero.aktiva ? "jes" : "ne")},
Fenris Wolf pli bona apartigado inter f...

Fenris Wolf authored 7 years ago

116) 									].map(x => ("... " + " " + x.titolo + ": " + x.valoro));
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

117) 									akcepti(linioj);
118) 								}
119) 								else
120) 								{
121) 									akcepti(["tia kromajxo ne ekzistas"]);
122) 								}
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

123) 							}
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

124) 						);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

125) 					},
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

126) 					"sxalti": function (identigilo : string, aktiva : boolean = null) : tipo_plenumanto<Array<string>, Error>
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

127) 					{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

128) 						return (
129) 							(akcepti, rifuzi) =>
130) 							{
131) 								if (identigilo in that.kromajxoj)
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

132) 								{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

133) 									if (identigilo != "stirado")
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

134) 									{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

135) 										let aktiva_ : boolean = (aktiva != null) ? aktiva : (! that.kromajxoj[identigilo].aktiva);
136) 										that.kromajxoj[identigilo].aktiva = aktiva_;
137) 										akcepti(["kromajxo '" + identigilo + "' " + (aktiva_ ? "aktivigita" : "malaktivigita") + ""]);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

138) 									}
139) 									else
140) 									{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

141) 										akcepti(["vi ne vere volas malsxalti la stirad-kromajxon ..."]);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

142) 									}
143) 								}
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

144) 								else
145) 								{
146) 									akcepti(["tia kromajxo ne ekzistas"]);
147) 								}
148) 							}
149) 						);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

150) 					},
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

151) 					"resxargi": function (identigilo : string) : tipo_plenumanto<Array<string>, Error>
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

152) 					{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

153) 						return (
154) 							(akcepti, rifuzi) =>
155) 							{
156) 								let ero : tipo_ero = that.kromajxoj[identigilo];
157) 								if (ero.kromajxo instanceof klaso_kromajxo_ekstera)
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

158) 								{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

159) 									let kromajxo : klaso_kromajxo_ekstera = <klaso_kromajxo_ekstera>(ero.kromajxo);
160) 									kromajxo.resxargi
161) 									(
162) 										function (eraro : Error) : void
163) 										{
164) 											if (eraro != null)
Fenris Wolf 'starigi'-metodo por kromaj...

Fenris Wolf authored 7 years ago

165) 											{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

166) 												console.warn(eraro);
167) 												akcepti(["resxargado fiaskis; detaloj trovigxas je la konzolo"]);
Fenris Wolf 'starigi'-metodo por kromaj...

Fenris Wolf authored 7 years ago

168) 											}
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

169) 											else
170) 											{
171) 												akcepti(["kromajxo '" + identigilo + "' resxargita"]);
172) 											}
173) 										}
174) 									);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

175) 								}
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

176) 								else
177) 								{
178) 									akcepti(["nur eksteraj kromajxoj resxargeblas"]);
179) 								}
180) 							}
181) 						);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

182) 					},
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

183) 					"aldoni": function (nomo : string) : tipo_plenumanto<Array<string>, Error>
Fenris Wolf malgranda gxisdatigajxo

Fenris Wolf authored 7 years ago

184) 					{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

185) 						return (
186) 							(akcepti, rifuzi) =>
187) 							{
188) 								if ((new RegExp("\\S")).test(nomo))
189) 								{
190) 									// let vojo : string = "kromajxoj/" + nomo + ".js";
191) 									let vojo : string = nomo;
192) 									klaso_kromajxo_ekstera.krei
193) 									(
194) 										vojo,
195) 										function (eraro : Error, kromajxo : klaso_kromajxo_ekstera) : void
196) 										{
197) 											if (eraro != null)
198) 											{
199) 												console.warn(eraro);
200) 												akcepti(["aldoni kromajxon fiaskis"]);
201) 											}
202) 											else
203) 											{
204) 												that.kromajxo_aldoni
205) 												(
206) 													kromajxo,
207) 													undefined,
208) 													undefined,
209) 													function (eraro_ : Error) : void
210) 													{
211) 														if (eraro_ != null)
212) 														{
213) 															console.warn(eraro_);
214) 															akcepti(["kromajx-aldonado fiaskis"]);
215) 														}
216) 														else
217) 														{
218) 															akcepti(["kromajxo sukcese aldonita"]);
219) 														}
220) 													}
221) 												);
222) 											}
223) 										}
224) 									);
225) 								}
226) 								else
227) 								{
228) 									akcepti(["nevalida"]);
229) 								}
230) 							}
231) 						);
232) 					},
233) 					"elmontri_helpon": function () : tipo_plenumanto<Array<string>, Error>
234) 					{
235) 						return (
236) 							(akcepti, rifuzi) =>
237) 							{
238) 								akcepti
239) 								(
240) 									[
241) 										"'!kromajxo listigi': listigi la nomojn de cxiuj kromajxoj kaj elmontri cxu ili estas sxaltitaj",
242) 										"'!kromajxo detaloj [nomo]': elmontri detalojn pri la kromajxo kun la nomo [nomo]",
243) 									]
244) 								);
245) 							}
246) 						);
Fenris Wolf malgranda gxisdatigajxo

Fenris Wolf authored 7 years ago

247) 					},
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

248) 				}
249) 			)
250) 		);
251) 	}
252) 	
253) 	
254) 	/**
255) 	 * @author fenris
256) 	 */
Fenris Wolf 'starigi'-metodo por kromaj...

Fenris Wolf authored 7 years ago

257) 	public kromajxo_aldoni(kromajxo : klaso_kromajxo, aktiva : boolean = true, anstatauxigi : boolean = false, finado : (eraro ?: Error)=>void = vokado_nenio) : void
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

258) 	{
Fenris Wolf 'starigi'-metodo por kromaj...

Fenris Wolf authored 7 years ago

259) 		let that : klaso_kliento = this;
260) 		kromajxo.starigi
261) 		(
262) 			function (eraro : Error) : void
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

263) 			{
Fenris Wolf 'starigi'-metodo por kromaj...

Fenris Wolf authored 7 years ago

264) 				if (eraro != null)
265) 				{
266) 					finado(eraro);
267) 				}
268) 				else
269) 				{
270) 					let identigilo : string = kromajxo.identigilo_legi();
271) 					if (identigilo in that.kromajxoj)
272) 					{
273) 						if (anstatauxigi && (identigilo != "stirado"))
274) 						{
275) 							let mesagxo : string = ("kromajxo '" + identigilo + "' jam registrita; gxi anstatauxigatos");
276) 							console.warn(mesagxo);
277) 							that.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
278) 							finado(null);
279) 						}
280) 						else
281) 						{
282) 							let mesagxo : string = ("kromajxo '" + identigilo + "' jam registrita; gxi NE anstatauxigatos");
283) 							finado(new Error(mesagxo));
284) 						}
285) 					}
286) 					else
287) 					{
288) 						that.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
289) 						finado(null);
290) 					}
291) 				}
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

292) 			}
Fenris Wolf 'starigi'-metodo por kromaj...

Fenris Wolf authored 7 years ago

293) 		);
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

294) 	}
295) 	
296) 	
297) 	/**
298) 	 * @author fenris
299) 	 */
300) 	public abstract konekti(parametroj : Object, fino : ()=>void) : void;
301) 	
302) 	
303) 	/**
304) 	 * @author fenris
305) 	 */
306) 	public enigi(enigo : klaso_evento_eniga) : void
307) 	{
308) 		let that : klaso_kliento = this;
309) 		Object.keys(this.kromajxoj).forEach
310) 		(
311) 			function (identigilo : string) : void
312) 			{
313) 				let ero : tipo_ero = that.kromajxoj[identigilo];
314) 				{
315) 					if (ero.aktiva)
316) 					{
317) 						ero.kromajxo.enigi
318) 						(
319) 							enigo,
320) 							function (eligo : klaso_evento_eliga) : void
321) 							{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

322) // console.info("--", "eniga fonto estis '" + enigo["fonto"] + "'");
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

323) 								try
324) 								{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

325) 									if (! enigo["fonto"].startsWith("#"))
Fenris Wolf unua enmetajxo

Fenris Wolf authored 7 years ago

326) 									{
Fenris Wolf pli bona laborado inter kli...

Fenris Wolf authored 7 years ago

327) // console.info("--", "..., kiuj sxajne ne estas kanalo; la eliga celo estis '" + eligo["celo"] + "' kaj estos '" + enigo["sendinto"] + "' nun");