Software /
code /
prosody
Comparison
core/modulemanager.lua @ 710:56f6c115bc69
modulemanager: Added reload support, with callbacks for saving and restoring state
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Tue, 13 Jan 2009 22:37:07 +0500 |
parent | 709:8bb83563cb21 |
child | 713:2afd6d9e21cd |
comparison
equal
deleted
inserted
replaced
709:8bb83563cb21 | 710:56f6c115bc69 |
---|---|
138 | 138 |
139 function unload(host, name, ...) | 139 function unload(host, name, ...) |
140 local mod = modulemap[host] and modulemap[host][name]; | 140 local mod = modulemap[host] and modulemap[host][name]; |
141 if not mod then return nil, "module-not-loaded"; end | 141 if not mod then return nil, "module-not-loaded"; end |
142 | 142 |
143 if type(rawget(mod, "unload")) == "function" then | 143 if type(mod.module.unload) == "function" then |
144 local ok, err = pcall(rawget(mod, "unload"), ...) | 144 local ok, err = pcall(mod.module.unload, ...) |
145 if (not ok) and err then | 145 if (not ok) and err then |
146 log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err); | 146 log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err); |
147 end | 147 end |
148 end | 148 end |
149 modulemap[host][name] = nil; | 149 modulemap[host][name] = nil; |
156 stanza_handlers:remove(param[1], param[2], param[3], param[4]); | 156 stanza_handlers:remove(param[1], param[2], param[3], param[4]); |
157 end | 157 end |
158 end | 158 end |
159 event_hooks:remove(host, name); | 159 event_hooks:remove(host, name); |
160 return true; | 160 return true; |
161 end | |
162 | |
163 function reload(host, name, ...) | |
164 local mod = modulemap[host] and modulemap[host][name]; | |
165 if not mod then return nil, "module-not-loaded"; end | |
166 | |
167 local saved; | |
168 if type(mod.module.save) == "function" then | |
169 local ok, err = pcall(mod.module.save) | |
170 if (not ok) and err then | |
171 log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err); | |
172 else | |
173 saved = err; | |
174 end | |
175 end | |
176 | |
177 unload(host, name, ...); | |
178 if load(host, name, ...) then | |
179 mod = modulemap[host] and modulemap[host][name]; | |
180 if type(mod.module.restore) == "function" then | |
181 local ok, err = pcall(mod.module.restore, saved or {}) | |
182 if (not ok) and err then | |
183 log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err); | |
184 end | |
185 end | |
186 return true; | |
187 end | |
161 end | 188 end |
162 | 189 |
163 function handle_stanza(host, origin, stanza) | 190 function handle_stanza(host, origin, stanza) |
164 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type; | 191 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type; |
165 if name == "iq" and xmlns == "jabber:client" then | 192 if name == "iq" and xmlns == "jabber:client" then |