You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
963 B
Lua
30 lines
963 B
Lua
local Subscription = require "rx.subscription"
|
|
local util = require "rx.util"
|
|
|
|
--- @class TimeoutScheduler
|
|
-- @description A scheduler that uses luvit's timer library to schedule events on an event loop.
|
|
local TimeoutScheduler = {}
|
|
TimeoutScheduler.__index = TimeoutScheduler
|
|
TimeoutScheduler.__tostring = util.constant("TimeoutScheduler")
|
|
|
|
--- Creates a new TimeoutScheduler.
|
|
-- @returns {TimeoutScheduler}
|
|
function TimeoutScheduler.create()
|
|
return setmetatable({}, TimeoutScheduler)
|
|
end
|
|
|
|
--- Schedules an action to run at a future point in time.
|
|
-- @arg {function} action - The action to run.
|
|
-- @arg {number=0} delay - The delay, in milliseconds.
|
|
-- @returns {Subscription}
|
|
function TimeoutScheduler:schedule(action, delay, ...)
|
|
local _ = self
|
|
local timer = require "rx.timer"
|
|
local handle = timer.setTimeout(delay, action, ...)
|
|
return Subscription.create(function()
|
|
timer.clearTimeout(handle)
|
|
end)
|
|
end
|
|
|
|
return TimeoutScheduler
|