Software /
code /
prosody
Comparison
core/modulemanager.lua @ 4344:a24ee48ec30d
modulemanager: Add module:hook_global(name, handler, priority) to hook global (server-wide) events
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 14 Aug 2011 13:56:13 -0400 |
parent | 4337:a2ee8ab82dd9 |
child | 4363:35ebd8e5747a |
comparison
equal
deleted
inserted
replaced
4343:203137823046 | 4344:a24ee48ec30d |
---|---|
173 end | 173 end |
174 -- unhook event handlers hooked by module:hook | 174 -- unhook event handlers hooked by module:hook |
175 for event, handlers in pairs(hooks:get(host, name) or NULL) do | 175 for event, handlers in pairs(hooks:get(host, name) or NULL) do |
176 for handler in pairs(handlers or NULL) do | 176 for handler in pairs(handlers or NULL) do |
177 (hosts[host] or prosody).events.remove_handler(event, handler); | 177 (hosts[host] or prosody).events.remove_handler(event, handler); |
178 end | |
179 end | |
180 -- unhook event handlers hooked by module:hook_global | |
181 for event, handlers in pairs(hooks:get("*", name) or NULL) do | |
182 for handler in pairs(handlers or NULL) do | |
183 prosody.events.remove_handler(event, handler); | |
178 end | 184 end |
179 end | 185 end |
180 hooks:remove(host, name); | 186 hooks:remove(host, name); |
181 if mod.module.items then -- remove items | 187 if mod.module.items then -- remove items |
182 for key,t in pairs(mod.module.items) do | 188 for key,t in pairs(mod.module.items) do |
289 function api:hook(event, handler, priority) | 295 function api:hook(event, handler, priority) |
290 hooks:set(self.host, self.name, event, handler, true); | 296 hooks:set(self.host, self.name, event, handler, true); |
291 (hosts[self.host] or prosody).events.add_handler(event, handler, priority); | 297 (hosts[self.host] or prosody).events.add_handler(event, handler, priority); |
292 end | 298 end |
293 | 299 |
300 function api:hook_global(event, handler, priority) | |
301 hooks:set("*", self.name, event, handler, true); | |
302 prosody.events.add_handler(event, handler, priority); | |
303 end | |
304 | |
294 function api:hook_stanza(xmlns, name, handler, priority) | 305 function api:hook_stanza(xmlns, name, handler, priority) |
295 if not handler and type(name) == "function" then | 306 if not handler and type(name) == "function" then |
296 -- If only 2 options then they specified no xmlns | 307 -- If only 2 options then they specified no xmlns |
297 xmlns, name, handler, priority = nil, xmlns, name, handler; | 308 xmlns, name, handler, priority = nil, xmlns, name, handler; |
298 elseif not (handler and name) then | 309 elseif not (handler and name) then |