Comparison

plugins/muc/mod_muc.lua @ 5062:88e198d65905

MUC: Send unavailable presence when the component or server is shutting down.
author Waqas Hussain <waqas20@gmail.com>
date Wed, 01 Aug 2012 01:36:22 +0500
parent 5058:433cc9a4c7e9
child 5064:7a1eb302c562
comparison
equal deleted inserted replaced
5061:186f34d88073 5062:88e198d65905
176 else error("component.send only supports result and error stanzas at the moment"); end 176 else error("component.send only supports result and error stanzas at the moment"); end
177 end 177 end
178 178
179 hosts[module:get_host()].muc = { rooms = rooms }; 179 hosts[module:get_host()].muc = { rooms = rooms };
180 180
181 local saved = false;
181 module.save = function() 182 module.save = function()
183 saved = true;
182 return {rooms = rooms}; 184 return {rooms = rooms};
183 end 185 end
184 module.restore = function(data) 186 module.restore = function(data)
185 for jid, oldroom in pairs(data.rooms or {}) do 187 for jid, oldroom in pairs(data.rooms or {}) do
186 local room = muc_new_room(jid); 188 local room = muc_new_room(jid);
192 room.save = room_save; 194 room.save = room_save;
193 rooms[jid] = room; 195 rooms[jid] = room;
194 end 196 end
195 hosts[module:get_host()].muc = { rooms = rooms }; 197 hosts[module:get_host()].muc = { rooms = rooms };
196 end 198 end
199
200 function shutdown_room(room, stanza)
201 for nick, occupant in pairs(room._occupants) do
202 stanza.attr.from = nick;
203 for jid in pairs(occupant.sessions) do
204 stanza.attr.to = jid;
205 room:_route_stanza(stanza);
206 room._jid_nick[jid] = nil;
207 end
208 room._occupants[nick] = nil;
209 end
210 end
211 function shutdown_component()
212 if not saved then
213 local stanza = st.presence({type = "unavailable"})
214 :tag("x", {xmlns = "http://jabber.org/protocol/muc#user"})
215 :tag("item", { affiliation='none', role='none' }):up();
216 for roomjid, room in pairs(rooms) do
217 shutdown_room(room, stanza);
218 end
219 shutdown_room(host_room, stanza);
220 end
221 end
222 module.unload = shutdown_component;
223 module:hook_global("server-stopping", shutdown_component);