Add support for arbitrary events and event hooks
authorMatthew Wild <mwild1@gmail.com>
Fri, 3 Oct 2008 21:17:20 +0000 (22:17 +0100)
committerMatthew Wild <mwild1@gmail.com>
Fri, 3 Oct 2008 21:17:20 +0000 (22:17 +0100)
core/modulemanager.lua

index ad92b41b3230e8e235094c668465ba99caf5a6e4..2779746e2ad4a3e1d79b6128983ceb191953b6ba 100644 (file)
@@ -4,6 +4,7 @@ local log = require "util.logger".init("modulemanager")
 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 @@ function handle_stanza(origin, stanza)
        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;