Changeset

5899:26f54b462601

core/moduleapi: Return timer object from module:add_timer
author daurnimator <quae@daurnimator.com>
date Wed, 06 Nov 2013 12:56:35 -0500
parents 5898:bf9aba718c01
children 5900:cb1103423aa7
files core/moduleapi.lua
diffstat 1 files changed, 24 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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);