# HG changeset patch # User Matthew Wild # Date 1223068640 -3600 # Node ID 89877d61ac512a54afda5c2757e171b813b466e4 # Parent 3fdfd6e0cb4e23b916062499a25271d3ce6c6715 Add support for arbitrary events and event hooks diff -r 3fdfd6e0cb4e -r 89877d61ac51 core/modulemanager.lua --- a/core/modulemanager.lua Thu Oct 02 01:08:58 2008 +0100 +++ b/core/modulemanager.lua Fri Oct 03 22:17:20 2008 +0100 @@ -4,6 +4,7 @@ local loadfile, pcall = loadfile, pcall; local setmetatable, setfenv, getfenv = setmetatable, setfenv, getfenv; local pairs, ipairs = pairs, ipairs; +local t_insert = table.insert; local type = type; local tostring, print = tostring, print; @@ -90,3 +91,25 @@ log("debug", "Stanza unhandled by any modules"); return false; -- we didn't handle it end + +do + local event_handlers = {}; + + function modulehelpers.add_event_hook(name, handler) + if not event_handlers[name] then + event_handlers[name] = {}; + end + t_insert(event_handlers[name] , handler); + end + + function fire_event(name, ...) + local event_handlers = event_handlers[name]; + if event_handlers then + for name, handler in ipairs(event_handlers) do + handler(...); + end + end + end +end + +return _M;