core/moduleapi: Return timer object from module:add_timer

vault/0.11
daurnimator 12 years ago
parent b3325a4073
commit b2c50851b2
  1. 29
      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);

Loading…
Cancel
Save