Fix some lobby issues

هذا الالتزام موجود في:
Dmitry Lenshin
2025-09-23 23:12:36 +03:00
الأصل ef4147930c
التزام 18d27d9ad2
7 ملفات معدلة مع 154 إضافات و96 حذوفات

عرض الملف

@@ -18,6 +18,7 @@ module.exports = class Peer {
peer_video_privacy,
peer_recording,
peer_hand,
peer_lobby,
} = peer_info;
this.id = socket_id;
@@ -32,12 +33,15 @@ module.exports = class Peer {
this.peer_video_privacy = peer_video_privacy;
this.peer_recording = peer_recording;
this.peer_hand = peer_hand;
this.peer_lobby = peer_lobby;
this.transports = new Map();
this.consumers = new Map();
this.producers = new Map();
}
// ####################################################
// UPDATE PEER INFO
// ####################################################
@@ -83,6 +87,10 @@ module.exports = class Peer {
this.peer_info.peer_audio_volume = data.volume;
this.peer_audio_volume = data.volume;
break;
case 'lobby':
this.peer_info.peer_lobby = data.status;
this.peer_lobby = data.status;
break;
default:
break;
}

عرض الملف

@@ -590,6 +590,14 @@ module.exports = class Room {
}
}
getPresenterPeers() {
return Array.from(this.peers.values()).filter((peer) => peer.peer_presenter);
}
getLobbyPeers() {
return Array.from(this.peers.values()).filter((peer) => peer.peer_lobby);
}
// ####################################################
// WebRTC TRANSPORT
// ####################################################

عرض الملف

@@ -1927,6 +1927,7 @@ function startServer() {
log.debug(
'The user is currently waiting to join the room because the lobby is enabled, and they are not a presenter'
);
peer.updatePeerInfo({ type: 'lobby', status: true });
room.broadCast(socket.id, 'roomLobby', {
peer_id: peer_id,
peer_name: peer_name,
@@ -1971,15 +1972,7 @@ function startServer() {
}
}
// handle WebHook
if (webhook.enabled) {
// Trigger a POST request when a user joins
data.timestamp = log.getDateTime(false);
axios
.post(webhook.url, { event: 'join', data })
.then((response) => log.debug('Join event tracked:', response.data))
.catch((error) => log.error('Error tracking join event:', error.message));
}
handleJoinWebHook(room.id, data.peer_info);
cb(room.toJson());
});
@@ -2460,12 +2453,24 @@ function startServer() {
broadcast: data.broadcast,
});
if (data.peers_id && data.broadcast) {
for (let peer_id in data.peers_id) {
room.sendTo(data.peers_id[peer_id], 'roomLobby', data);
const pears_id = data.peers_id ? data.peers_id : [data.peer_id];
// Also send to all presenters to update lobby UI on there side
const send_to_pears_id = pears_id.concat(room.getPresenterPeers().map((peer) => peer.id));
for (const peer_id of send_to_pears_id) {
room.sendTo(peer_id, 'roomLobby', data);
}
if (data.lobby_status === 'accept') {
for (const peer_id of pears_id) {
const peer = room.getPeer(peer_id);
if (!peer.peer_lobby) continue;
peer.updatePeerInfo({ type: 'lobby', status: false });
handleJoinWebHook(room.id, peer.peer_info);
}
} else {
room.sendTo(data.peer_id, 'roomLobby', data);
}
});
@@ -3495,8 +3500,26 @@ function startServer() {
callback('Successfully exited room');
});
// Helpers
async function handleJoinWebHook(room_id, peer_info) {
// handle WebHook
if (webhook.enabled) {
// Trigger a POST request when a user joins
const data = {
timestamp: log.getDateTime(false),
room_id,
peer_info,
};
axios
.post(webhook.url, { event: 'join', data })
.then((response) => log.debug('Join event tracked:', response.data))
.catch((error) => log.error('Error tracking join event:', error.message));
}
}
function getRoomAndPeer(socket) {
const room = getRoom(socket);