9 |
9 |
10 local ns_addtimer = require "net.server".addtimer; |
10 local ns_addtimer = require "net.server".addtimer; |
11 local event = require "net.server".event; |
11 local event = require "net.server".event; |
12 local event_base = require "net.server".event_base; |
12 local event_base = require "net.server".event_base; |
13 |
13 |
14 local get_time = os.time; |
14 local math_min = math.min |
|
15 local math_huge = math.huge |
|
16 local get_time = require "socket".gettime; |
15 local t_insert = table.insert; |
17 local t_insert = table.insert; |
16 local t_remove = table.remove; |
18 local t_remove = table.remove; |
17 local ipairs, pairs = ipairs, pairs; |
19 local ipairs, pairs = ipairs, pairs; |
18 local type = type; |
20 local type = type; |
19 |
21 |
41 t_insert(data, d); |
43 t_insert(data, d); |
42 end |
44 end |
43 new_data = {}; |
45 new_data = {}; |
44 end |
46 end |
45 |
47 |
|
48 local next_time = math_huge; |
46 for i, d in pairs(data) do |
49 for i, d in pairs(data) do |
47 local t, func = d[1], d[2]; |
50 local t, func = d[1], d[2]; |
48 if t <= current_time then |
51 if t <= current_time then |
49 data[i] = nil; |
52 data[i] = nil; |
50 local r = func(current_time); |
53 local r = func(current_time); |
51 if type(r) == "number" then _add_task(r, func); end |
54 if type(r) == "number" then |
|
55 _add_task(r, func); |
|
56 next_time = math_min(next_time, r); |
|
57 end |
|
58 else |
|
59 next_time = math_min(next_time, t - current_time); |
52 end |
60 end |
53 end |
61 end |
|
62 return next_time; |
54 end); |
63 end); |
55 else |
64 else |
56 local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1; |
65 local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1; |
57 function _add_task(delay, func) |
66 function _add_task(delay, func) |
58 local event_handle; |
67 local event_handle; |