aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2013-11-06 12:56:35 -0500
committerdaurnimator <quae@daurnimator.com>2013-11-06 12:56:35 -0500
commitb2c50851b295612a149727ee89302fd2efef2fe3 (patch)
tree938e043a002f6f4f9f3219eeb9d7b62b6798380c /core
parentb3325a4073f83da672df19711e78be2d58c7ff92 (diff)
downloadprosody-b2c50851b295612a149727ee89302fd2efef2fe3.tar.gz
prosody-b2c50851b295612a149727ee89302fd2efef2fe3.zip
core/moduleapi: Return timer object from module:add_timer
Diffstat (limited to 'core')
-rw-r--r--core/moduleapi.lua29
1 files changed, 24 insertions, 5 deletions
diff --git a/core/moduleapi.lua b/core/moduleapi.lua
index 65e00d41..a32ad245 100644
--- a/core/moduleapi.lua
+++ b/core/moduleapi.lua
@@ -347,11 +347,30 @@ 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
+
+local pack = table.pack or function(...) return {n=select("#",...), ...}; 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);