Software /
code /
prosody
Comparison
core/modulemanager.lua @ 39:89877d61ac51
Add support for arbitrary events and event hooks
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 03 Oct 2008 22:17:20 +0100 |
parent | 38:3fdfd6e0cb4e |
child | 42:2e3715e30912 |
comparison
equal
deleted
inserted
replaced
38:3fdfd6e0cb4e | 39:89877d61ac51 |
---|---|
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; |