Software / code / prosody
Comparison
core/modulemanager.lua @ 1259:6bd11bca9725
modulemanager: Keep track of event handlers added by module:hook, and remove them on module unload
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sun, 31 May 2009 13:31:20 +0500 |
| parent | 1253:60156584c442 |
| child | 1309:a544e68a0989 |
comparison
equal
deleted
inserted
replaced
| 1254:c199be608546 | 1259:6bd11bca9725 |
|---|---|
| 47 local modulehelpers = setmetatable({}, { __index = _G }); | 47 local modulehelpers = setmetatable({}, { __index = _G }); |
| 48 | 48 |
| 49 local features_table = multitable_new(); | 49 local features_table = multitable_new(); |
| 50 local handler_table = multitable_new(); | 50 local handler_table = multitable_new(); |
| 51 local hooked = multitable_new(); | 51 local hooked = multitable_new(); |
| 52 local hooks = multitable_new(); | |
| 52 local event_hooks = multitable_new(); | 53 local event_hooks = multitable_new(); |
| 53 | 54 |
| 54 local NULL = {}; | 55 local NULL = {}; |
| 55 | 56 |
| 56 -- Load modules when a host is activated | 57 -- Load modules when a host is activated |
| 163 handler_info[handlers[1]] = nil; | 164 handler_info[handlers[1]] = nil; |
| 164 stanza_handlers:remove(param[1], param[2], param[3], param[4]); | 165 stanza_handlers:remove(param[1], param[2], param[3], param[4]); |
| 165 end | 166 end |
| 166 end | 167 end |
| 167 event_hooks:remove(host, name); | 168 event_hooks:remove(host, name); |
| 169 -- unhook event handlers hooked by module:hook | |
| 170 for event, handlers in pairs(hooks:get(host, name) or NULL) do | |
| 171 for handler in pairs(handlers or NULL) do | |
| 172 (hosts[host] or prosody).events.remove_handler(event, handler); | |
| 173 end | |
| 174 end | |
| 175 hooks:remove(host, name); | |
| 168 return true; | 176 return true; |
| 169 end | 177 end |
| 170 | 178 |
| 171 function reload(host, name, ...) | 179 function reload(host, name, ...) |
| 172 local mod = get_module(host, name); | 180 local mod = get_module(host, name); |
| 354 function api:fire_event(...) | 362 function api:fire_event(...) |
| 355 return (hosts[self.host] or prosody).events.fire_event(...); | 363 return (hosts[self.host] or prosody).events.fire_event(...); |
| 356 end | 364 end |
| 357 | 365 |
| 358 function api:hook(event, handler) | 366 function api:hook(event, handler) |
| 367 hooks:set(self.host, self.name, event, handler, true); | |
| 359 (hosts[self.host] or prosody).events.add_handler(event, handler); | 368 (hosts[self.host] or prosody).events.add_handler(event, handler); |
| 360 end | 369 end |
| 361 | 370 |
| 362 -------------------------------------------------------------------- | 371 -------------------------------------------------------------------- |
| 363 | 372 |