Diff

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
line wrap: on
line diff
--- 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;