Mercurial Hosting > luan
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 ) { |