1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-01 17:38:41 +00:00

Implement API to cancel async jobs

Co-authored-by: sfan5 <sfan5@live.de>
This commit is contained in:
y5nw 2024-04-30 19:08:20 +02:00 committed by y5nw
parent 535d757563
commit 660151972f
12 changed files with 232 additions and 78 deletions

View file

@ -8,15 +8,24 @@ function core.async_event_handler(jobid, retval)
core.async_jobs[jobid] = nil
end
local job_metatable = {__index = {}}
function job_metatable.__index:cancel()
local cancelled = core.cancel_async_callback(self.id)
if cancelled then
core.async_jobs[self.id] = nil
end
return cancelled
end
function core.handle_async(func, callback, ...)
assert(type(func) == "function" and type(callback) == "function",
"Invalid core.handle_async invocation")
local args = {n = select("#", ...), ...}
local mod_origin = core.get_last_run_mod()
local jobid = core.do_async_callback(func, args, mod_origin)
core.async_jobs[jobid] = callback
local id = core.do_async_callback(func, args, mod_origin)
core.async_jobs[id] = callback
return true
return setmetatable({id = id}, job_metatable)
end