comparison src/luan/modules/http/LuanHandler.java @ 1563:8fbcc4747091

remove LuanFunction.luan
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 09 Nov 2020 01:37:57 -0700
parents b89212fd04b5
children c922446f53aa
comparison
equal deleted inserted replaced
1562:b89212fd04b5 1563:8fbcc4747091
65 this.domain = domain; 65 this.domain = domain;
66 try { 66 try {
67 Fns fns = new Fns(this); 67 Fns fns = new Fns(this);
68 LuanTable Http = (LuanTable)luanInit.require("luan:http/Http.luan"); 68 LuanTable Http = (LuanTable)luanInit.require("luan:http/Http.luan");
69 if( Http.get(luanInit,"reset_luan") == null ) 69 if( Http.get(luanInit,"reset_luan") == null )
70 Http.put( luanInit, "reset_luan", new LuanJavaFunction(luanInit,resetLuanMethod,fns) ); 70 Http.put( luanInit, "reset_luan", new LuanJavaFunction(resetLuanMethod,fns) );
71 Http.put( luanInit, "eval_in_root", new LuanJavaFunction(luanInit,evalInRootMethod,fns) ); 71 Http.put( luanInit, "eval_in_root", new LuanJavaFunction(evalInRootMethod,fns) );
72 Http.put( luanInit, "disable_luan", new LuanJavaFunction(luanInit,disableLuanMethod,fns) ); 72 Http.put( luanInit, "disable_luan", new LuanJavaFunction(disableLuanMethod,fns) );
73 Http.put( luanInit, "dont_gc", new LuanJavaFunction(luanInit,dontGcMethod,fns) ); 73 Http.put( luanInit, "dont_gc", new LuanJavaFunction(dontGcMethod,fns) );
74 } catch(LuanException e) { 74 } catch(LuanException e) {
75 throw new RuntimeException(e); 75 throw new RuntimeException(e);
76 } 76 }
77 if( domain != null ) 77 if( domain != null )
78 logger.info("new "+domain); 78 logger.info("new "+domain);
151 if( fn == null ) 151 if( fn == null )
152 throw new LuanException( "function not found: " + fnName ); 152 throw new LuanException( "function not found: " + fnName );
153 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); 153 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
154 fn = (LuanFunction)cloner.get(fn); 154 fn = (LuanFunction)cloner.get(fn);
155 } 155 }
156 return fn.call(args); 156 return fn.call(luan,args);
157 } finally { 157 } finally {
158 LuanLogger.endThreadLogging(); 158 LuanLogger.endThreadLogging();
159 rwLock.readLock().unlock(); 159 rwLock.readLock().unlock();
160 } 160 }
161 } 161 }
188 Luan luan; 188 Luan luan;
189 synchronized(luanInit) { 189 synchronized(luanInit) {
190 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); 190 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
191 luan = (Luan)cloner.clone(currentLuan); 191 luan = (Luan)cloner.clone(currentLuan);
192 } 192 }
193 luan.load(text,"<eval_in_root>",false,null).call(); 193 luan.load(text,"<eval_in_root>",false,null).call(luan);
194 currentLuan = luan; 194 currentLuan = luan;
195 } 195 }
196 196
197 private void dont_gc() { 197 private void dont_gc() {
198 dontGc.add(this); 198 dontGc.add(this);
254 synchronized(luanInit) { 254 synchronized(luanInit) {
255 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); 255 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
256 luan = (Luan)cloner.clone(currentLuan); 256 luan = (Luan)cloner.clone(currentLuan);
257 } 257 }
258 LuanTable module = (LuanTable)luan.require("luan:http/Http.luan"); 258 LuanTable module = (LuanTable)luan.require("luan:http/Http.luan");
259 return (Response)module.fn(luan,"handle_error").call( request, e.table(luan) ); 259 return (Response)module.fn("handle_error").call( luan, request, e.table(luan) );
260 } 260 }
261 261
262 private Response serviceLuan(Request request) 262 private Response serviceLuan(Request request)
263 throws LuanException 263 throws LuanException
264 { 264 {
276 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); 276 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
277 luan = (Luan)cloner.clone(currentLuan); 277 luan = (Luan)cloner.clone(currentLuan);
278 fn = (LuanFunction)cloner.get(mod); 278 fn = (LuanFunction)cloner.get(mod);
279 } 279 }
280 LuanTable module = (LuanTable)luan.require("luan:http/Http.luan"); 280 LuanTable module = (LuanTable)luan.require("luan:http/Http.luan");
281 module.fn(luan,"new_request").call(request); 281 module.fn("new_request").call(luan,request);
282 module.fn(luan,"new_response").call(); 282 module.fn("new_response").call(luan);
283 fn.call(); 283 fn.call(luan);
284 return (Response)module.fn(luan,"finish").call(); 284 return (Response)module.fn("finish").call(luan);
285 } 285 }
286 286
287 private Response serviceNotFound(Request request) 287 private Response serviceNotFound(Request request)
288 throws LuanException 288 throws LuanException
289 { 289 {
290 LuanFunction fn; 290 LuanFunction fn;
291 Luan luan; 291 Luan luan;
292 synchronized(luanInit) { 292 synchronized(luanInit) {
293 enableLoad("luan:http/Http.luan"); 293 enableLoad("luan:http/Http.luan");
294 LuanTable module = (LuanTable)currentLuan.require("luan:http/Http.luan"); 294 LuanTable module = (LuanTable)currentLuan.require("luan:http/Http.luan");
295 fn = module.fn(currentLuan,"not_found_handler"); 295 fn = module.fn("not_found_handler");
296 if( fn == null ) 296 if( fn == null )
297 return null; 297 return null;
298 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); 298 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
299 luan = (Luan)cloner.clone(currentLuan); 299 luan = (Luan)cloner.clone(currentLuan);
300 fn = (LuanFunction)cloner.get(fn); 300 fn = (LuanFunction)cloner.get(fn);
301 } 301 }
302 LuanTable module = (LuanTable)luan.require("luan:http/Http.luan"); 302 LuanTable module = (LuanTable)luan.require("luan:http/Http.luan");
303 module.fn(luan,"new_request").call(request); 303 module.fn("new_request").call(luan,request);
304 module.fn(luan,"new_response").call(); 304 module.fn("new_response").call(luan);
305 Object obj = Luan.first(fn.call()); 305 Object obj = Luan.first(fn.call(luan));
306 if( !(obj instanceof Boolean) ) 306 if( !(obj instanceof Boolean) )
307 throw new LuanException("not_found_handler must return boolean"); 307 throw new LuanException("not_found_handler must return boolean");
308 boolean handled = (Boolean)obj; 308 boolean handled = (Boolean)obj;
309 return handled ? (Response)module.fn(luan,"finish").call() : null; 309 return handled ? (Response)module.fn("finish").call(luan) : null;
310 } 310 }
311 311
312 private void enableLoad(String... mods) throws LuanException { 312 private void enableLoad(String... mods) throws LuanException {
313 LuanTable loaded = PackageLuan.loaded(currentLuan); 313 LuanTable loaded = PackageLuan.loaded(currentLuan);
314 for( String mod : mods ) { 314 for( String mod : mods ) {