local hosts = hosts;
local prosody = prosody;
-local loadfile, pcall, xpcall = loadfile, pcall, xpcall;
-local setmetatable, setfenv, getfenv = setmetatable, setfenv, getfenv;
-local pairs, ipairs = pairs, ipairs;
-local t_insert, t_concat = table.insert, table.concat;
-local type = type;
-local next = next;
-local rawget = rawget;
-local error = error;
-local tostring, tonumber = tostring, tonumber;
+local pcall, xpcall = pcall, xpcall;
+local setmetatable, rawget, setfenv = setmetatable, rawget, setfenv;
+local pairs, type, tostring = pairs, type, tostring;
local debug_traceback = debug.traceback;
local unpack, select = unpack, select;
return xpcall(function() return f(unpack(params, 1, n)) end, function(e) return tostring(e).."\n"..debug_traceback(); end);
end
-local array, set = require "util.array", require "util.set";
+local set = require "util.set";
local autoload_modules = {"presence", "message", "iq", "offline", "c2s", "s2s"};
local component_inheritable_modules = {"tls", "dialback", "iq"};
-- [host] = { [module] = module_env }
local modulemap = { ["*"] = {} };
-local NULL = {};
-
-- Load modules when a host is activated
function load_modules_for_host(host)
local component = config.get(host, "core", "component_module");
end
end
prosody.events.add_handler("host-activated", load_modules_for_host);
+prosody.events.add_handler("host-deactivated", function (host)
+ modulemap[host] = nil;
+end);
--- Private helpers ---
end
end
end
+ mod.module.loaded = false;
modulemap[host][name] = nil;
return true;
end
},{
__index = modulemap["*"][module_name].module;
});
+ local host_module = setmetatable({ module = host_module_api }, { __index = mod });
+ host_module_api.environment = host_module;
local ok, result, module_err = call_module_method(mod, "add_host", host_module_api);
if not ok or result == false then return nil, ok and module_err or result; end
- local host_module = setmetatable({ module = host_module_api }, { __index = mod });
modulemap[host][module_name] = host_module;
return host_module;
end
end
if host ~= api_instance.host and module_has_method(pluginenv, "add_host") then
-- Now load the module again onto the host it was originally being loaded on
- do_load_module(host, module_name);
+ ok, err = do_load_module(host, module_name);
end
end
end