226 room._affiliations = oldroom._affiliations; |
226 room._affiliations = oldroom._affiliations; |
227 end |
227 end |
228 hosts[module:get_host()].muc = { rooms = rooms }; |
228 hosts[module:get_host()].muc = { rooms = rooms }; |
229 end |
229 end |
230 |
230 |
231 function shutdown_room(room, stanza) |
|
232 for nick, occupant in pairs(room._occupants) do |
|
233 stanza.attr.from = nick; |
|
234 for jid in pairs(occupant.sessions) do |
|
235 stanza.attr.to = jid; |
|
236 room:_route_stanza(stanza); |
|
237 room._jid_nick[jid] = nil; |
|
238 end |
|
239 room._occupants[nick] = nil; |
|
240 end |
|
241 end |
|
242 function shutdown_component() |
231 function shutdown_component() |
243 if not saved then |
232 if not saved then |
244 local stanza = st.presence({type = "unavailable"}) |
233 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"}) |
245 :tag("x", {xmlns = "http://jabber.org/protocol/muc#user"}) |
|
246 :tag("item", { affiliation='none', role='none' }):up() |
|
247 :tag("status", { code = "332"}):up(); |
234 :tag("status", { code = "332"}):up(); |
248 for roomjid, room in pairs(rooms) do |
235 for roomjid, room in pairs(rooms) do |
249 shutdown_room(room, stanza); |
236 room:clear(x); |
250 end |
237 end |
251 shutdown_room(host_room, stanza); |
238 host_room:clear(x); |
252 end |
239 end |
253 end |
240 end |
254 module.unload = shutdown_component; |
241 module.unload = shutdown_component; |
255 module:hook_global("server-stopping", shutdown_component); |
242 module:hook_global("server-stopping", shutdown_component); |
256 |
243 |