Diff

util/timer.lua @ 6481:dbc72cd1332e

Move timer code out of util.timer and into relevant net.server backends
author daurnimator <quae@daurnimator.com>
date Mon, 20 Oct 2014 16:13:24 -0400
parent 5898:bf9aba718c01
child 6791:e813e8cf6046
line wrap: on
line diff
--- a/util/timer.lua	Fri Oct 17 17:30:21 2014 -0400
+++ b/util/timer.lua	Mon Oct 20 16:13:24 2014 -0400
@@ -9,80 +9,15 @@
 local indexedbheap = require "util.indexedbheap";
 local log = require "util.logger".init("timer");
 local server = require "net.server";
-local math_min = math.min
-local math_huge = math.huge
 local get_time = require "socket".gettime;
-local t_insert = table.insert;
-local pairs = pairs;
 local type = type;
 local debug_traceback = debug.traceback;
 local tostring = tostring;
 local xpcall = xpcall;
 
-local data = {};
-local new_data = {};
-
 module "timer"
 
-local _add_task;
-if not server.event then
-	function _add_task(delay, callback)
-		local current_time = get_time();
-		delay = delay + current_time;
-		if delay >= current_time then
-			t_insert(new_data, {delay, callback});
-		else
-			local r = callback(current_time);
-			if r and type(r) == "number" then
-				return _add_task(r, callback);
-			end
-		end
-	end
-
-	server._addtimer(function()
-		local current_time = get_time();
-		if #new_data > 0 then
-			for _, d in pairs(new_data) do
-				t_insert(data, d);
-			end
-			new_data = {};
-		end
-
-		local next_time = math_huge;
-		for i, d in pairs(data) do
-			local t, callback = d[1], d[2];
-			if t <= current_time then
-				data[i] = nil;
-				local r = callback(current_time);
-				if type(r) == "number" then
-					_add_task(r, callback);
-					next_time = math_min(next_time, r);
-				end
-			else
-				next_time = math_min(next_time, t - current_time);
-			end
-		end
-		return next_time;
-	end);
-else
-	local event = server.event;
-	local event_base = server.event_base;
-	local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1;
-
-	function _add_task(delay, callback)
-		local event_handle;
-		event_handle = event_base:addevent(nil, 0, function ()
-			local ret = callback(get_time());
-			if ret then
-				return 0, ret;
-			elseif event_handle then
-				return EVENT_LEAVE;
-			end
-		end
-		, delay);
-	end
-end
-
+local _add_task = server.add_task;
 --add_task = _add_task;
 
 local h = indexedbheap.create();