Mercurial Hosting > luan
changeset 1322:d5739c101bd6
improve Thread
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 06 Feb 2019 01:11:12 -0700 |
parents | 307e76ccd0d6 |
children | 3860ed4b8552 |
files | conv.txt src/luan/modules/Thread.luan src/luan/modules/ThreadLuan.java src/luan/modules/http/tools/Shell.luan |
diffstat | 4 files changed, 36 insertions(+), 61 deletions(-) [+] |
line wrap: on
line diff
diff -r 307e76ccd0d6 -r d5739c101bd6 conv.txt --- a/conv.txt Tue Feb 05 22:36:55 2019 -0700 +++ b/conv.txt Wed Feb 06 01:11:12 2019 -0700 @@ -1,3 +1,5 @@ +Thread.global_callable +Thread.global Logging.luanhost_logger Logging.init authorization user
diff -r 307e76ccd0d6 -r d5739c101bd6 src/luan/modules/Thread.luan --- a/src/luan/modules/Thread.luan Tue Feb 05 22:36:55 2019 -0700 +++ b/src/luan/modules/Thread.luan Wed Feb 06 01:11:12 2019 -0700 @@ -4,6 +4,7 @@ local error = Luan.error local set_metatable = Luan.set_metatable or error() local try = Luan.try or error() +local Time = require "luan:Time.luan" local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "Thread" @@ -34,35 +35,11 @@ end ---[[ -Thread.global = {} -- shared across threads -local map = ThreadLuan.GlobalMap.new() -local global_mt = {} -set_metatable(Thread.global,global_mt) - -function global_mt.__index(_,key) - return map.get(key) -end - -function global_mt.__new_index(_,key,value) - map.put(key,value) -end +local forever = Time.period{years=100} -function Thread.get_global_timeout() - return map.timeout -end - -function Thread.set_global_timeout(timeout) - map.timeout = timeout -end - -function Thread.global_put(key,value) - return map.put(key,value) -end -]] - -function Thread.global_callable(name,timeout,fns) - local callable = ThreadLuan.globalCallable(name,timeout,fns) +function Thread.global_callable(name,fns,timeout) + timeout = timeout or forever + local callable = ThreadLuan.globalCallable(name,fns,timeout) local mt = {} function mt.__index(_,key) return function(...) @@ -76,35 +53,31 @@ Thread.remove_global_callable = ThreadLuan.removeGlobalCallable +function Thread.global_map(name,timeout) + timeout = timeout or forever -local map = {} -local fns = {} + local map = {} + local fns = {} + + function fns.get(key) + return map[key] + end -function fns.get(key) - return map[key] -end + function fns.put(key,value) + map[key] = value + end -function fns.put(key,value) - map[key] = value + local callable = ThreadLuan.globalCallable(name,fns,timeout) + local mt = {} + function mt.__index(_,key) + return callable.call("get",key) + end + function mt.__new_index(_,key,value) + return callable.call("put",key,value) + end + local tbl = {} + set_metatable(tbl,mt) + return tbl end -Thread.global = {} -- shared across threads -local global_mt = {} -set_metatable(Thread.global,global_mt) - -function global_mt.__index(_,key) - return global_mt.fns.get(key) -end - -function global_mt.__new_index(_,key,value) - global_mt.fns.put(key,value) -end - -function Thread.set_global_timeout(timeout) - global_mt.fns = Thread.global_callable("Thread.global",timeout,fns) -end - -Thread.set_global_timeout(60000) -- one minute - - return Thread
diff -r 307e76ccd0d6 -r d5739c101bd6 src/luan/modules/ThreadLuan.java --- a/src/luan/modules/ThreadLuan.java Tue Feb 05 22:36:55 2019 -0700 +++ b/src/luan/modules/ThreadLuan.java Wed Feb 06 01:11:12 2019 -0700 @@ -17,6 +17,7 @@ import luan.LuanTable; import luan.LuanException; import luan.LuanCloner; +import luan.LuanCloneable; public final class ThreadLuan { @@ -155,9 +156,9 @@ } return a; } else { - if( v==null || v instanceof String || v instanceof Boolean || v instanceof Number ) - return v; - return new Unsafe("type "+Luan.type(v)); + if( v instanceof LuanCloneable ) + return new Unsafe("type "+Luan.type(v)); + return v; } } @@ -201,7 +202,7 @@ } } - public static synchronized Callable globalCallable(LuanState luan,String name,long timeout,LuanTable fns) { + public static synchronized Callable globalCallable(LuanState luan,String name,LuanTable fns,long timeout) { Callable callable = callableMap.get(name); if( callable == null ) { sweep();
diff -r 307e76ccd0d6 -r d5739c101bd6 src/luan/modules/http/tools/Shell.luan --- a/src/luan/modules/http/tools/Shell.luan Tue Feb 05 22:36:55 2019 -0700 +++ b/src/luan/modules/http/tools/Shell.luan Wed Feb 06 01:11:12 2019 -0700 @@ -21,9 +21,8 @@ local Shell = {} -local forever = Time.period{days=1000000} local count = 0 -local new_session = Thread.global_callable("shell.new_session",forever,{next=function() +local new_session = Thread.global_callable("shell.new_session",{next=function() count = count + 1 return to_string(count) end}).next @@ -57,7 +56,7 @@ local timeout = Time.period{hours=10} local function get_session(session_id) - return Thread.global_callable("shell.session"..session_id,timeout,fns) + return Thread.global_callable("shell.session"..session_id,fns,timeout) end function Shell.respond()