|
@@ -153,6 +153,20 @@ function filter_session(session)
|
153
|
153
|
end
|
154
|
154
|
end
|
155
|
155
|
|
|
156
|
+function attach_lobby_room(room)
|
|
157
|
+ local node = jid_split(room.jid);
|
|
158
|
+ local lobby_room_jid = node .. '@' .. lobby_muc_component_config;
|
|
159
|
+ if not lobby_muc_service.get_room_from_jid(lobby_room_jid) then
|
|
160
|
+ local new_room = lobby_muc_service.create_room(lobby_room_jid);
|
|
161
|
+ module:log("debug","Lobby room jid = %s created",lobby_room_jid);
|
|
162
|
+ new_room.main_room = room;
|
|
163
|
+ room._data.lobbyroom = new_room;
|
|
164
|
+ room:save(true);
|
|
165
|
+ return true
|
|
166
|
+ end
|
|
167
|
+ return false
|
|
168
|
+end
|
|
169
|
+
|
156
|
170
|
-- process a host module directly if loaded or hooks to wait for its load
|
157
|
171
|
function process_host_module(name, callback)
|
158
|
172
|
local function process_host(host)
|
|
@@ -251,15 +265,14 @@ process_host_module(main_muc_component_config, function(host_module, host)
|
251
|
265
|
-- hooks when lobby is enabled to create its room, only done here or by admin
|
252
|
266
|
host_module:hook('muc-config-submitted', function(event)
|
253
|
267
|
local actor, room = event.actor, event.room;
|
|
268
|
+ local actor_node = jid_split(actor);
|
|
269
|
+ if actor_node == 'focus' then
|
|
270
|
+ return;
|
|
271
|
+ end
|
254
|
272
|
local members_only = event.fields['muc#roomconfig_membersonly'] and true or nil;
|
255
|
273
|
if members_only then
|
256
|
|
- local node = jid_split(room.jid);
|
257
|
|
-
|
258
|
|
- local lobby_room_jid = node .. '@' .. lobby_muc_component_config;
|
259
|
|
- if not lobby_muc_service.get_room_from_jid(lobby_room_jid) then
|
260
|
|
- local new_room = lobby_muc_service.create_room(lobby_room_jid);
|
261
|
|
- new_room.main_room = room;
|
262
|
|
- room._data.lobbyroom = new_room;
|
|
274
|
+ local lobby_created = attach_lobby_room(room);
|
|
275
|
+ if lobby_created then
|
263
|
276
|
event.status_codes['104'] = true;
|
264
|
277
|
notify_lobby_enabled(room, actor, true);
|
265
|
278
|
end
|
|
@@ -373,6 +386,14 @@ function update_session(event)
|
373
|
386
|
end
|
374
|
387
|
end
|
375
|
388
|
|
|
389
|
+function handle_create_lobby(event)
|
|
390
|
+ local room = event.room;
|
|
391
|
+ room:set_members_only(true);
|
|
392
|
+ module:log("info","Set room jid = %s as members only",room.jid);
|
|
393
|
+ attach_lobby_room(room)
|
|
394
|
+end
|
|
395
|
+
|
376
|
396
|
module:hook_global('bosh-session', update_session);
|
377
|
397
|
module:hook_global('websocket-session', update_session);
|
378
|
398
|
module:hook_global('config-reloaded', load_config);
|
|
399
|
+module:hook_global('create-lobby-room', handle_create_lobby);
|