Mercurial Hosting > luan
view src/luan/modules/Thread.luan @ 1353:8d95711f6615
replace java() with require "java"
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 20 Mar 2019 17:03:29 -0600 |
parents | d5739c101bd6 |
children | ae2321a09723 |
line wrap: on
line source
require "java" local ThreadLuan = require "java:luan.modules.ThreadLuan" local Luan = require "luan:Luan.luan" 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" local Thread = {} Thread.sleep = ThreadLuan.sleep local function safe(fn) return function() try { fn catch = function(e) logger.error(e) end } end end function Thread.fork(fn) fn = safe(fn) ThreadLuan.fork(fn) end function Thread.schedule(delay,fn,repeating) fn = safe(fn) ThreadLuan.schedule(delay,fn,repeating) end local forever = Time.period{years=100} 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(...) return callable.call(key,...) end end local tbl = {} set_metatable(tbl,mt) return tbl end Thread.remove_global_callable = ThreadLuan.removeGlobalCallable function Thread.global_map(name,timeout) timeout = timeout or forever local map = {} local fns = {} function fns.get(key) return map[key] end function fns.put(key,value) map[key] = value end 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 return Thread