From 22e9dc9893288b5b62cc4e73c5027f101e5bc6d1 Mon Sep 17 00:00:00 2001 From: Aaron van Meerten Date: Thu, 20 Jul 2017 15:16:29 -0500 Subject: [PATCH] Handles async context for all poltergeists set up async context for all poltergeist calls utils lib now has async wrapper for event handlers --- resources/prosody-plugins/mod_muc_poltergeist.lua | 9 ++++----- resources/prosody-plugins/util.lib.lua | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/resources/prosody-plugins/mod_muc_poltergeist.lua b/resources/prosody-plugins/mod_muc_poltergeist.lua index 9997b8707..2078e7495 100644 --- a/resources/prosody-plugins/mod_muc_poltergeist.lua +++ b/resources/prosody-plugins/mod_muc_poltergeist.lua @@ -5,6 +5,7 @@ local neturl = require "net.url"; local parse = neturl.parseQuery; local st = require "util.stanza"; local get_room_from_jid = module:require "util".get_room_from_jid; +local wrap_async_run = module:require "util".wrap_async_run; local timer = require "util.timer"; -- Options @@ -430,7 +431,6 @@ function handle_update_poltergeist (event) local nick = string.sub(username, 0, 8); if (have_poltergeist_occupant(room, nick)) then update_poltergeist_occupant_status(room, nick, status); - return 200; else return 404; @@ -474,15 +474,14 @@ function handle_remove_poltergeist (event) end end - log("info", "Loading poltergeist service"); module:depends("http"); module:provides("http", { default_path = "/"; name = "poltergeist"; route = { - ["GET /poltergeist/create"] = handle_create_poltergeist; - ["GET /poltergeist/update"] = handle_update_poltergeist; - ["GET /poltergeist/remove"] = handle_remove_poltergeist; + ["GET /poltergeist/create"] = function (event) return wrap_async_run(event,handle_create_poltergeist) end; + ["GET /poltergeist/update"] = function (event) return wrap_async_run(event,handle_update_poltergeist) end; + ["GET /poltergeist/remove"] = function (event) return wrap_async_run(event,handle_remove_poltergeist) end; }; }); diff --git a/resources/prosody-plugins/util.lib.lua b/resources/prosody-plugins/util.lib.lua index b0a6a38f0..209d65196 100644 --- a/resources/prosody-plugins/util.lib.lua +++ b/resources/prosody-plugins/util.lib.lua @@ -1,4 +1,5 @@ local jid = require "util.jid"; +local runner, waiter = require "util.async".runner, require "util.async".waiter; --- Finds and returns room by its jid -- @param room_jid the room jid to search in the muc component @@ -20,6 +21,20 @@ function get_room_from_jid(room_jid) end end + +function wrap_async_run(event,handler) + local result; + local async_func = runner(function (event) + local wait, done = waiter(); + result=handler(event); + done(); + return result; + end) + async_func:run(event) + return result; +end + return { get_room_from_jid = get_room_from_jid; + wrap_async_run = wrap_async_run; }; \ No newline at end of file