diff options
Diffstat (limited to 'builtin/mainmenu/async_event.lua')
-rw-r--r-- | builtin/mainmenu/async_event.lua | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/builtin/mainmenu/async_event.lua b/builtin/mainmenu/async_event.lua new file mode 100644 index 000000000..04bfb78d6 --- /dev/null +++ b/builtin/mainmenu/async_event.lua @@ -0,0 +1,32 @@ + +core.async_jobs = {} + +local function handle_job(jobid, serialized_retval) + local retval = core.deserialize(serialized_retval) + assert(type(core.async_jobs[jobid]) == "function") + core.async_jobs[jobid](retval) + core.async_jobs[jobid] = nil +end + +core.async_event_handler = handle_job + +function core.handle_async(func, parameter, callback) + -- Serialize function + local serialized_func = string.dump(func) + + assert(serialized_func ~= nil) + + -- Serialize parameters + local serialized_param = core.serialize(parameter) + + if serialized_param == nil then + return false + end + + local jobid = core.do_async_callback(serialized_func, serialized_param) + + core.async_jobs[jobid] = callback + + return true +end + |