Mercurial Hosting > luan
diff http/src/luan/modules/http/HttpServicer.java @ 626:53a50c70c5e2
add Luan.assert_function() and Http.run_later()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 17 Jan 2016 06:19:46 -0700 |
parents | 60c549d43988 |
children | 859c0dedc8b6 |
line wrap: on
line diff
--- a/http/src/luan/modules/http/HttpServicer.java Tue Jan 12 23:52:56 2016 -0700 +++ b/http/src/luan/modules/http/HttpServicer.java Sun Jan 17 06:19:46 2016 -0700 @@ -11,6 +11,8 @@ import java.util.Arrays; import java.util.Iterator; import java.util.Enumeration; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import javax.servlet.ServletOutputStream; import javax.servlet.ServletException; import javax.servlet.http.Cookie; @@ -157,6 +159,7 @@ module.rawPut("response",responseTbl); fn.call(luan); + handle_run_later(luan); return true; } @@ -256,4 +259,34 @@ } } + + + private static String RUN_LATER_KEY = "Http.run_later"; + private static final Executor exec = Executors.newSingleThreadExecutor(); + + public static void run_later(final LuanState luan,final LuanFunction fn,final Object... args) { + List list = (List)luan.registry().get(RUN_LATER_KEY); + if( list == null ) { + list = new ArrayList(); + luan.registry().put(RUN_LATER_KEY,list); + } + list.add( + new Runnable(){public void run() { + try { + fn.call(luan,args); + } catch(LuanException e) { + e.printStackTrace(); + } + }} + ); + } + + private static void handle_run_later(LuanState luan) { + List list = (List)luan.registry().get(RUN_LATER_KEY); + if( list==null ) + return; + for( Object obj : list ) { + exec.execute((Runnable)obj); + } + } }