2 local log = require "util.logger".init("modulemanager") |
2 local log = require "util.logger".init("modulemanager") |
3 |
3 |
4 local loadfile, pcall = loadfile, pcall; |
4 local loadfile, pcall = loadfile, pcall; |
5 local setmetatable, setfenv, getfenv = setmetatable, setfenv, getfenv; |
5 local setmetatable, setfenv, getfenv = setmetatable, setfenv, getfenv; |
6 local pairs, ipairs = pairs, ipairs; |
6 local pairs, ipairs = pairs, ipairs; |
|
7 local t_insert = table.insert; |
7 local type = type; |
8 local type = type; |
8 |
9 |
9 local tostring, print = tostring, print; |
10 local tostring, print = tostring, print; |
10 |
11 |
11 local _G = _G; |
12 local _G = _G; |
88 end |
89 end |
89 end |
90 end |
90 log("debug", "Stanza unhandled by any modules"); |
91 log("debug", "Stanza unhandled by any modules"); |
91 return false; -- we didn't handle it |
92 return false; -- we didn't handle it |
92 end |
93 end |
|
94 |
|
95 do |
|
96 local event_handlers = {}; |
|
97 |
|
98 function modulehelpers.add_event_hook(name, handler) |
|
99 if not event_handlers[name] then |
|
100 event_handlers[name] = {}; |
|
101 end |
|
102 t_insert(event_handlers[name] , handler); |
|
103 end |
|
104 |
|
105 function fire_event(name, ...) |
|
106 local event_handlers = event_handlers[name]; |
|
107 if event_handlers then |
|
108 for name, handler in ipairs(event_handlers) do |
|
109 handler(...); |
|
110 end |
|
111 end |
|
112 end |
|
113 end |
|
114 |
|
115 return _M; |