38 lines
873 B
Lua
38 lines
873 B
Lua
lua_async.limiting = {
|
|
pool = {},
|
|
}
|
|
|
|
function lua_async.limiting.unset_limit(co)
|
|
lua_async.limiting.pool[co] = nil
|
|
end
|
|
|
|
function lua_async.set_limit(ms)
|
|
local co = assert(coroutine.running(), "set_limit called outside of an async function")
|
|
|
|
local limit = ms / 1000
|
|
|
|
lua_async.limiting.pool[co] = {
|
|
limit = limit,
|
|
next_yield = lua_async.clock() + limit,
|
|
}
|
|
end
|
|
|
|
function lua_async.unset_limit()
|
|
local co = assert(coroutine.running(), "unset_limit called outside of an async function")
|
|
lua_async.limiting.unset_limit(co)
|
|
end
|
|
|
|
function lua_async.check_limit()
|
|
local co = assert(coroutine.running(), "check_limit called outside of an async function")
|
|
local limit = lua_async.limiting.pool[co]
|
|
|
|
if limit and lua_async.clock() >= limit.next_yield then
|
|
lua_async.yield()
|
|
limit.next_yield = lua_async.clock() + limit.limit
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|