diff options
author | Kim Alvefur <zash@zash.se> | 2014-09-11 01:17:56 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2014-09-11 01:17:56 +0200 |
commit | 43df3959ab0c8801cb39c1d7eba96af8a3785064 (patch) | |
tree | 147e215854eea3b4657112876b5c45863c73acc8 /core/moduleapi.lua | |
parent | f41908a42c7e4f8397b52536e5e32c771b07a096 (diff) | |
parent | 534a115ec7aff123fa3358c500554d02b247e4a8 (diff) | |
download | prosody-43df3959ab0c8801cb39c1d7eba96af8a3785064.tar.gz prosody-43df3959ab0c8801cb39c1d7eba96af8a3785064.zip |
Merge 0.10->trunk
Diffstat (limited to 'core/moduleapi.lua')
-rw-r--r-- | core/moduleapi.lua | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/core/moduleapi.lua b/core/moduleapi.lua index 8b477140..30d28418 100644 --- a/core/moduleapi.lua +++ b/core/moduleapi.lua @@ -17,8 +17,10 @@ local resolve_relative_path = require"util.paths".resolve_relative_path; local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; local error, setmetatable, type = error, setmetatable, type; -local ipairs, pairs, select, unpack = ipairs, pairs, select, unpack; +local ipairs, pairs, select = ipairs, pairs, select; local tonumber, tostring = tonumber, tostring; +local pack = table.pack or function(...) return {n=select("#",...), ...}; end -- table.pack is only in 5.2 +local unpack = table.unpack or unpack; -- renamed in 5.2 local prosody = prosody; local hosts = prosody.hosts; @@ -348,11 +350,29 @@ function api:send(stanza) return core_post_stanza(hosts[self.host], stanza); end -function api:add_timer(delay, callback) - return timer.add_task(delay, function (t) - if self.loaded == false then return; end - return callback(t); - end); +local timer_methods = { } +local timer_mt = { + __index = timer_methods; +} +function timer_methods:stop( ) + timer.stop(self.id); +end +timer_methods.disarm = timer_methods.stop +function timer_methods:reschedule(delay) + timer.reschedule(self.id, delay) +end + +local function timer_callback(now, id, t) + if t.module_env.loaded == false then return; end + return t.callback(now, unpack(t, 1, t.n)); +end + +function api:add_timer(delay, callback, ...) + local t = pack(...) + t.module_env = self; + t.callback = callback; + t.id = timer.add_task(delay, timer_callback, t); + return setmetatable(t, timer_mt); end local path_sep = package.config:sub(1,1); |