'starigi'-metodo por kromajxoj aldonitis
Fenris Wolf

Fenris Wolf commited on 2016-06-11 13:35:29
Zeige 7 geänderte Dateien mit 168 Einfügungen und 12 Löschungen.

... ...
@@ -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,11 +70,27 @@ 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"));
74 83
 												}
75
-									// console.log("-- ... preta");
84
+												else
85
+												{
76 86
 													preta();
77 87
 												}
88
+											}
89
+										);
90
+									}
91
+									// console.log("-- ... preta");
92
+									// preta();
93
+								}
78 94
 							);
79 95
 						}
80 96
 					);
... ...
@@ -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,12 +160,28 @@ abstract class klaso_kliento
159 160
 									}
160 161
 									else
161 162
 									{
162
-										that.kromajxo_aldoni(kromajxo);
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
+												{
163 177
 													if (celo != null) that.eligi(new klaso_evento_eliga_mesagxo(celo, null, "kromajxo sukcese aldonita"));
164 178
 												}
165 179
 											}
166 180
 										);
167 181
 									}
182
+								}
183
+							);
184
+						}
168 185
 					},
169 186
 					"elmontri_helpon": function (celo : string) : void
170 187
 					{
... ...
@@ -180,26 +197,44 @@ 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
201
+	{
202
+		let that : klaso_kliento = this;
203
+		kromajxo.starigi
204
+		(
205
+			function (eraro : Error) : void
206
+			{
207
+				if (eraro != null)
208
+				{
209
+					finado(eraro);
210
+				}
211
+				else
184 212
 				{
185 213
 					let identigilo : string = kromajxo.identigilo_legi();
186
-		if (identigilo in this.kromajxoj)
214
+					if (identigilo in that.kromajxoj)
187 215
 					{
188 216
 						if (anstatauxigi && (identigilo != "stirado"))
189 217
 						{
190
-				console.warn("kromajxo '" + identigilo + "' jam registrita; gxi anstatauxigatos");
191
-				this.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
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);
192 222
 						}
193 223
 						else
194 224
 						{
195
-				console.warn("kromajxo '" + identigilo + "' jam registrita; gxi NE anstatauxigatos");
225
+							let mesagxo : string = ("kromajxo '" + identigilo + "' jam registrita; gxi NE anstatauxigatos");
226
+							finado(new Error(mesagxo));
196 227
 						}
197 228
 					}
198 229
 					else
199 230
 					{
200
-			this.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
231
+						that.kromajxoj[identigilo] = {"kromajxo": kromajxo, "aktiva": aktiva};
232
+						finado(null);
233
+					}
201 234
 				}
202 235
 			}
236
+		);
237
+	}
203 238
 	
204 239
 	
205 240
 	/**
... ...
@@ -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,16 +94,41 @@ 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"];
99
+					that.starigi
100
+					(
101
+						function (eraro_ : Error) : void
102
+						{
103
+							if (eraro_ != null)
104
+							{
105
+								fino(eraro_);
106
+							}
107
+							else
108
+							{
90 109
 								fino(null);
91 110
 							}
92 111
 						}
93 112
 					);
94 113
 				}
114
+			}
115
+		);
116
+	}
117
+	
118
+	
119
+	/**
120
+	 * @author fenris
121
+	 * @override
122
+	 */
123
+	public starigi(finado : (eraro ?: Error)=>void) : void
124
+	{
125
+		this.starigi_(finado, this.memoro);
126
+	}
95 127
 	
96 128
 	
97 129
 	/**
98 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
5 6