Software /
code /
prosody
Comparison
core/modulemanager.lua @ 439:6608ad3a72f3
is_loaded() and incomplete unload() for modules
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 27 Nov 2008 16:52:30 +0000 |
parent | 438:193f9dd64f17 |
child | 467:66f145f5c932 |
comparison
equal
deleted
inserted
replaced
438:193f9dd64f17 | 439:6608ad3a72f3 |
---|---|
25 | 25 |
26 local modulehelpers = setmetatable({}, { __index = _G }); | 26 local modulehelpers = setmetatable({}, { __index = _G }); |
27 | 27 |
28 | 28 |
29 function load(host, module_name, config) | 29 function load(host, module_name, config) |
30 if not (host and module_name) then | |
31 return nil, "insufficient-parameters"; | |
32 end | |
30 local mod, err = loadfile("plugins/mod_"..module_name..".lua"); | 33 local mod, err = loadfile("plugins/mod_"..module_name..".lua"); |
31 if not mod then | 34 if not mod then |
32 log("error", "Unable to load module '%s': %s", module_name or "nil", err or "nil"); | 35 log("error", "Unable to load module '%s': %s", module_name or "nil", err or "nil"); |
33 return nil, err; | 36 return nil, err; |
34 end | 37 end |
55 end | 58 end |
56 | 59 |
57 modulemap[host][module_name] = mod; | 60 modulemap[host][module_name] = mod; |
58 | 61 |
59 return true; | 62 return true; |
63 end | |
64 | |
65 function is_loaded(host, name) | |
66 return modulemap[host] and modulemap[host][name] and true; | |
67 end | |
68 | |
69 function unload(host, name, ...) | |
70 local mod = modulemap[host] and modulemap[host][name]; | |
71 if not mod then return nil, "module-not-loaded"; end | |
72 | |
73 if type(mod.unload) == "function" then | |
74 local ok, err = pcall(mod.unload, ...) | |
75 if (not ok) and err then | |
76 log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err); | |
77 end | |
78 end | |
79 | |
60 end | 80 end |
61 | 81 |
62 function handle_stanza(host, origin, stanza) | 82 function handle_stanza(host, origin, stanza) |
63 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type; | 83 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type; |
64 | 84 |