# HG changeset patch # User daurnimator # Date 1383760595 18000 # Node ID 26f54b462601841e8a201b366518f6fc0b8fae95 # Parent bf9aba718c0149c1659b17375e8ca6a7a87bbf8e core/moduleapi: Return timer object from module:add_timer diff -r bf9aba718c01 -r 26f54b462601 core/moduleapi.lua --- a/core/moduleapi.lua Wed Nov 06 12:56:18 2013 -0500 +++ b/core/moduleapi.lua Wed Nov 06 12:56:35 2013 -0500 @@ -347,11 +347,30 @@ 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);