Software / code / prosody
Comparison
util/timer.lua @ 4808:07d0a3a75c8a
net.server, net.timer, net.server_select: Rearrange dependencies between these three modules. server.addtimer() is no longer a public function (renamed to _addtimer) and is not available at all from server_event (compat code removed to prevent traceback) (thanks Nulani)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 03 May 2012 16:48:34 +0100 |
| parent | 4751:0c7ae4bfc835 |
| child | 4812:5bcdc384e485 |
comparison
equal
deleted
inserted
replaced
| 4807:2999f0fd1347 | 4808:07d0a3a75c8a |
|---|---|
| 4 -- | 4 -- |
| 5 -- This project is MIT/X11 licensed. Please see the | 5 -- This project is MIT/X11 licensed. Please see the |
| 6 -- COPYING file in the source package for more information. | 6 -- COPYING file in the source package for more information. |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 | 9 local server = require "net.server"; |
| 10 local ns_addtimer = require "net.server".addtimer; | |
| 11 local event = require "net.server".event; | |
| 12 local event_base = require "net.server".event_base; | |
| 13 | |
| 14 local math_min = math.min | 10 local math_min = math.min |
| 15 local math_huge = math.huge | 11 local math_huge = math.huge |
| 16 local get_time = require "socket".gettime; | 12 local get_time = require "socket".gettime; |
| 17 local t_insert = table.insert; | 13 local t_insert = table.insert; |
| 18 local pairs = pairs; | 14 local pairs = pairs; |
| 22 local new_data = {}; | 18 local new_data = {}; |
| 23 | 19 |
| 24 module "timer" | 20 module "timer" |
| 25 | 21 |
| 26 local _add_task; | 22 local _add_task; |
| 27 if not event then | 23 if not server.event then |
| 28 function _add_task(delay, callback) | 24 function _add_task(delay, callback) |
| 29 local current_time = get_time(); | 25 local current_time = get_time(); |
| 30 delay = delay + current_time; | 26 delay = delay + current_time; |
| 31 if delay >= current_time then | 27 if delay >= current_time then |
| 32 t_insert(new_data, {delay, callback}); | 28 t_insert(new_data, {delay, callback}); |
| 36 return _add_task(r, callback); | 32 return _add_task(r, callback); |
| 37 end | 33 end |
| 38 end | 34 end |
| 39 end | 35 end |
| 40 | 36 |
| 41 ns_addtimer(function() | 37 server._addtimer(function() |
| 42 local current_time = get_time(); | 38 local current_time = get_time(); |
| 43 if #new_data > 0 then | 39 if #new_data > 0 then |
| 44 for _, d in pairs(new_data) do | 40 for _, d in pairs(new_data) do |
| 45 t_insert(data, d); | 41 t_insert(data, d); |
| 46 end | 42 end |
| 62 end | 58 end |
| 63 end | 59 end |
| 64 return next_time; | 60 return next_time; |
| 65 end); | 61 end); |
| 66 else | 62 else |
| 63 local event = require "net.server".event; | |
| 64 local event_base = require "net.server".event_base; | |
| 67 local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1; | 65 local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1; |
| 66 | |
| 68 function _add_task(delay, callback) | 67 function _add_task(delay, callback) |
| 69 local event_handle; | 68 local event_handle; |
| 70 event_handle = event_base:addevent(nil, 0, function () | 69 event_handle = event_base:addevent(nil, 0, function () |
| 71 local ret = callback(); | 70 local ret = callback(); |
| 72 if ret then | 71 if ret then |