aboutsummaryrefslogtreecommitdiffstats
path: root/core/moduleapi.lua
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2015-03-27 22:24:57 +0000
committerMatthew Wild <mwild1@gmail.com>2015-03-27 22:24:57 +0000
commit85acc757991e3a425e8d8cab4611c7c321dc8425 (patch)
treef7d0930c79494da535857eaf4f2a976bb052fa35 /core/moduleapi.lua
parent25d886be280a1b6d9965b38cb22aa328354de0c2 (diff)
parentf3797f8dc8d711759fa4bf93a3a13f4dadbfdd7a (diff)
downloadprosody-85acc757991e3a425e8d8cab4611c7c321dc8425.tar.gz
prosody-85acc757991e3a425e8d8cab4611c7c321dc8425.zip
Merge 0.10->trunk
Diffstat (limited to 'core/moduleapi.lua')
-rw-r--r--core/moduleapi.lua32
1 files changed, 26 insertions, 6 deletions
diff --git a/core/moduleapi.lua b/core/moduleapi.lua
index e32c116a..d6aa0ef0 100644
--- a/core/moduleapi.lua
+++ b/core/moduleapi.lua
@@ -18,9 +18,11 @@ local measure = require "core.statsmanager".measure;
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 require = require;
+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;
@@ -350,11 +352,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);