mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
44 lines
848 B
Lua
44 lines
848 B
Lua
local timer = require "prosody.util.timer";
|
|
local setmetatable = setmetatable;
|
|
|
|
local _ENV = nil;
|
|
-- luacheck: std none
|
|
|
|
local watchdog_methods = {};
|
|
local watchdog_mt = { __index = watchdog_methods };
|
|
|
|
local function new(timeout, callback)
|
|
local watchdog = setmetatable({
|
|
timeout = timeout;
|
|
callback = callback;
|
|
timer_id = nil;
|
|
}, watchdog_mt);
|
|
|
|
watchdog:reset(); -- Kick things off
|
|
|
|
return watchdog;
|
|
end
|
|
|
|
function watchdog_methods:reset(new_timeout)
|
|
if new_timeout then
|
|
self.timeout = new_timeout;
|
|
end
|
|
if self.timer_id then
|
|
timer.reschedule(self.timer_id, self.timeout+1);
|
|
else
|
|
self.timer_id = timer.add_task(self.timeout+1, function ()
|
|
return self:callback();
|
|
end);
|
|
end
|
|
end
|
|
|
|
function watchdog_methods:cancel()
|
|
if self.timer_id then
|
|
timer.stop(self.timer_id);
|
|
self.timer_id = nil;
|
|
end
|
|
end
|
|
|
|
return {
|
|
new = new;
|
|
};
|