Browse code

'starigi'-metodo por kromajxoj aldonitis

Fenris Wolf authored on 11/06/2016 13:35:29
Showing 7 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,61 @@
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
+
22
+/**
23
+ * @author fenris
24
+ */
25
+function alporti<tipo_valoro>(strukturo : Object, ernomo : string, kompensajxo : tipo_valoro = null, eskalumado : int = 1) : tipo_valoro
26
+{
27
+	if (ernomo in strukturo)
28
+	{
29
+		return strukturo[ernomo];
30
+	}
31
+	else
32
+	{
33
+		switch (eskalumado)
34
+		{
35
+			case 0:
36
+			{
37
+				return kompensajxo;
38
+				break;
39
+			}
40
+			case 1:
41
+			{
42
+				let mesagxo : string = "la ero kun la nomo '" + ernomo + "' ne trovigxas en la strukturo; la kompensa valoro '" + String(kompensajxo) + " eldonitos";
43
+				console.warn(mesagxo);
44
+				return kompensajxo;
45
+				break;
46
+			}
47
+			case 2:
48
+			{
49
+				let mesagxo : string = "la ero kun la nomo '" + ernomo + "' ne trovigxas en la strukturo";
50
+				throw (new Error(mesagxo));
51
+				// break;
52
+			}
53
+			default:
54
+			{
55
+				throw (new Error("nevalida eskalumad-nivelo '" + eskalumado + "'"));
56
+				break;
57
+			}
58
+		}
59
+	}
60
+}
61
+
... ...
@@ -70,10 +70,26 @@ function cxefajxo() : void
70 70
 									}
71 71
 									else
72 72
 									{
73
-										kliento.kromajxo_aldoni(kromajxo, ero["aktiva"]);
73
+										kliento.kromajxo_aldoni
74
+										(
75
+											kromajxo,
76
+											ero["aktiva"],
77
+											undefined,
78
+											function (eraro : Error) : void
79
+											{
80
+												if (eraro != null)
81
+ 												{
82
+ 													throw (new Error("-- la kromajxo '" + ero["vojo"] + "' ne sxargeblas"));
83
+												}
84
+												else
85
+												{
86
+													preta();
87
+												}
88
+											}
89
+										);
74 90
 									}
75 91
 									// console.log("-- ... preta");
76
-									preta();
92
+									// preta();
77 93
 								}
78 94
 							);
79 95
 						}
... ...
@@ -146,7 +146,8 @@ abstract class klaso_kliento
146 146
 					{
147 147
 						if ((new RegExp("\\w")).test(nomo))
148 148
 						{
149
-							let vojo : string = "fontoj/kromajxoj/kromajxo_" + nomo + ".js";
149
+							// let vojo : string = "kromajxoj/" + nomo + ".js";
150
+							let vojo : string = nomo;
150 151
 							klaso_kromajxo_ekstera.krei
151 152
 							(
152 153
 								vojo,
... ...
@@ -159,8 +160,24 @@ abstract class klaso_kliento
159 160
 									}
160 161
 									else
161 162
 									{
162
-										that.kromajxo_aldoni(kromajxo);
163
-										if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "kromajxo sukcese aldonita"));
163
+										that.kromajxo_aldoni
164
+										(
165
+											kromajxo,
166
+											undefined,
167
+											undefined,
168
+											function (eraro_ : Error) : void
169
+											{
170
+												if (eraro_ != null)
171
+												{
172
+													console.warn(eraro_);
173
+													if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "aldoni kromajxon fiaskis"));
174
+												}
175
+												else
176
+												{
177
+													if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "kromajxo sukcese aldonita"));
178
+												}
179
+											}
180
+										);
164 181
 									}
165 182
 								}
166 183
 							);
... ...
@@ -180,25 +197,43 @@ abstract class klaso_kliento
180 197
 	/**
181 198
 	 * @author fenris
182 199
 	 */
183
-	public kromajxo_aldoni(kromajxo : klaso_kromajxo, aktiva : boolean = true, anstatauxigi : boolean = false) : void
200
+	public kromajxo_aldoni(kromajxo : klaso_kromajxo, aktiva : boolean = true, anstatauxigi : boolean = false, finado : (eraro ?: Error)=>void = vokado_nenio) : void
184 201
 	{
185
-		let identigilo : string = kromajxo.identigilo_legi();
186
-		if (identigilo in this.kromajxoj)
187
-		{
188
-			if (anstatauxigi && (identigilo != "stirado"))
189
-			{
190
-				console.warn("kromajxo '" + identigilo + "' jam registrita; gxi anstatauxigatos");
191
-				this.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
192
-			}
193
-			else
202
+		let that : klaso_kliento = this;
203
+		kromajxo.starigi
204
+		(
205
+			function (eraro : Error) : void
194 206
 			{
195
-				console.warn("kromajxo '" + identigilo + "' jam registrita; gxi NE anstatauxigatos");
207
+				if (eraro != null)
208
+				{
209
+					finado(eraro);
210
+				}
211
+				else
212
+				{
213
+					let identigilo : string = kromajxo.identigilo_legi();
214
+					if (identigilo in that.kromajxoj)
215
+					{
216
+						if (anstatauxigi && (identigilo != "stirado"))
217
+						{
218
+							let mesagxo : string = ("kromajxo '" + identigilo + "' jam registrita; gxi anstatauxigatos");
219
+							console.warn(mesagxo);
220
+							that.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
221
+							finado(null);
222
+						}
223
+						else
224
+						{
225
+							let mesagxo : string = ("kromajxo '" + identigilo + "' jam registrita; gxi NE anstatauxigatos");
226
+							finado(new Error(mesagxo));
227
+						}
228
+					}
229
+					else
230
+					{
231
+						that.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
232
+						finado(null);
233
+					}
234
+				}
196 235
 			}
197
-		}
198
-		else
199
-		{
200
-			this.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
201
-		}
236
+		);
202 237
 	}
203 238
 	
204 239
 	
... ...
@@ -139,6 +139,15 @@ abstract class klaso_kromajxo
139 139
 	}
140 140
 		
141 141
 	
142
+	/**
143
+	 * @author fenris
144
+	 */
145
+	public starigi(finado : (eraro ?: Error)=>void) : void
146
+	{
147
+		finado(null);
148
+	}
149
+	
150
+	
142 151
 	/**
143 152
 	 * @author fenris
144 153
 	 */
... ...
@@ -45,6 +45,12 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
45 45
 	protected reagi_ : (enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void, memoro ?: Object)=>void;
46 46
 	
47 47
 	
48
+	/**
49
+	 * @author fenris
50
+	 */
51
+	protected starigi_ : (finado : (eraro ?: Error)=>void, memoro ?: Object)=>void;
52
+	
53
+	
48 54
 	/**
49 55
 	 * @author fenris
50 56
 	 */
... ...
@@ -55,10 +61,12 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
55 61
 		priskribo : string = null,
56 62
 		uzo : string = null,
57 63
 		auxtoro : string = null,
58
-		reagi_ : (enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void)=>void
64
+		starigi_ : (finado : (eraro ?: Error)=>void, memoro ?: Object)=>void = (finado => finado(null)),
65
+		reagi_ : (enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void)=>void = null
59 66
 	)
60 67
 	{
61 68
 		super(identigilo, nomo, priskribo, uzo, auxtoro);
69
+		this.starigi_ = starigi_;
62 70
 		this.reagi_ = reagi_;
63 71
 		this.vojo = null;
64 72
 		this.memoro = {};
... ...
@@ -86,8 +94,22 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
86 94
 					that.priskribo = datumoj["priskribo"];
87 95
 					that.uzo = datumoj["uzo"];
88 96
 					that.auxtoro = datumoj["auxtoro"];
97
+					that.starigi_ = datumoj["starigi"];
89 98
 					that.reagi_ = datumoj["reagi"];
90
-					fino(null);
99
+					that.starigi
100
+					(
101
+						function (eraro_ : Error) : void
102
+						{
103
+							if (eraro_ != null)
104
+							{
105
+								fino(eraro_);
106
+							}
107
+							else
108
+							{
109
+								fino(null);
110
+							}
111
+						}
112
+					);
91 113
 				}
92 114
 			}
93 115
 		);
... ...
@@ -96,6 +118,17 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
96 118
 	
97 119
 	/**
98 120
 	 * @author fenris
121
+	 * @override
122
+	 */
123
+	public starigi(finado : (eraro ?: Error)=>void) : void
124
+	{
125
+		this.starigi_(finado, this.memoro);
126
+	}
127
+	
128
+	
129
+	/**
130
+	 * @author fenris
131
+	 * @override
99 132
 	 */
100 133
 	protected reagi(enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void) : void
101 134
 	{
... ...
@@ -158,6 +191,7 @@ class klaso_kromajxo_ekstera extends klaso_kromajxo
158 191
 						datumoj["priskribo"],
159 192
 						datumoj["uzo"],
160 193
 						datumoj["auxtoro"],
194
+						datumoj["starigi"],
161 195
 						datumoj["reagi"]
162 196
 					);
163 197
 					kromajxo.vojo = vojo;
... ...
@@ -110,7 +110,7 @@ class klaso_kromajxo_stirado extends klaso_kromajxo
110 110
 						"ago": x => this.agoj.listigi(enigo_kruda["parametroj"]["fonto"]),
111 111
 					},
112 112
 					{
113
-						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:detaloj|d)\\s*(\\w+)$")/*, new RegExp("$#(\\w+)")*/],
113
+						"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:detaloj|d|\\?)\\s*(\\w+)$")/*, new RegExp("$#(\\w+)")*/],
114 114
 						"ago": x => this.agoj.detaloj(x[0], enigo_kruda["parametroj"]["fonto"]),
115 115
 					},
116 116
 					{
... ...
@@ -1,4 +1,5 @@
1 1
 var_fontoj := 
2
+var_fontoj := ${var_fontoj} fontoj/bazo/funkcioj.ts
2 3
 var_fontoj := ${var_fontoj} fontoj/bazo/tipoj.ts
3 4
 var_fontoj := ${var_fontoj} fontoj/bazo/vokado.ts
4 5
 var_fontoj := ${var_fontoj} fontoj/bazo/cxeno.ts