From 0447694e0abf836aeec8b512a4ddf432d92e3b1b Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Sun, 5 Jan 2025 16:41:42 +0100 Subject: [PATCH] [mirotalksfu] - refactoring, update dep --- app/src/Server.js | 73 ++++++++++------------------------------- package.json | 4 +-- public/js/Room.js | 4 +-- public/js/RoomClient.js | 6 ++-- 4 files changed, 25 insertions(+), 62 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index d46d1d38..d78d88af 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -55,7 +55,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.6.80 + * @version 1.6.81 * */ @@ -2790,49 +2790,19 @@ function startServer() { }); socket.on('disconnect', async () => { - if (!roomExists(socket)) return; - - const { room, peer } = getRoomAndPeer(socket); - - const { peer_name, peer_uuid } = peer || {}; - - const isPresenter = await isPeerPresenter(socket.room_id, socket.id, peer_name, peer_uuid); - - log.debug('[Disconnect] - peer name', peer_name); - - room.removePeer(socket.id); - - if (room.getPeers().size === 0) { - // - stopRTMPActiveStreams(isPresenter, room); - - roomList.delete(socket.room_id); - - delete presenters[socket.room_id]; - - log.info('[Disconnect] - Last peer - current presenters grouped by roomId', presenters); - - const activeRooms = getActiveRooms(); - - log.info('[Disconnect] - Last peer - current active rooms', activeRooms); - - const activeStreams = getRTMPActiveStreams(); - - log.info('[Disconnect] - Last peer - current active RTMP streams', activeStreams); - } - - room.broadCast(socket.id, 'removeMe', removeMeData(room, peer_name, isPresenter)); - - if (isPresenter) removeIP(socket); - - socket.room_id = null; + await handleRoomExit('disconnect', socket, true); }); socket.on('exitRoom', async (_, callback) => { + await handleRoomExit('exitRoom', socket, false, callback); + }); + + // common + + async function handleRoomExit(event, socket, broadcast = false, callback = null) { if (!roomExists(socket)) { - return callback({ - error: 'Not currently in a room', - }); + if (callback) callback({ error: 'Room not found' }); + return; } const { room, peer } = getRoomAndPeer(socket); @@ -2841,39 +2811,32 @@ function startServer() { const isPresenter = await isPeerPresenter(socket.room_id, socket.id, peer_name, peer_uuid); - log.debug('Exit room', peer_name); - room.removePeer(socket.id); - room.broadCast(socket.id, 'removeMe', removeMeData(room, peer_name, isPresenter)); + if (broadcast) room.broadCast(socket.id, 'removeMe', removeMeData(room, peer_name, isPresenter)); + + log.debug('[Room Exit] ----------->', { event: event, peer_name: peer_name, isPresenter: isPresenter }); if (room.getPeers().size === 0) { - // stopRTMPActiveStreams(isPresenter, room); roomList.delete(socket.room_id); delete presenters[socket.room_id]; - log.info('[REMOVE ME] - Last peer - current presenters grouped by roomId', presenters); + log.info('[Room Exit] - Last peer - current presenters grouped by roomId', presenters); - const activeRooms = getActiveRooms(); + log.info('[Room Exit] - Current active rooms:', getActiveRooms()); - log.info('[REMOVE ME] - Last peer - current active rooms', activeRooms); - - const activeStreams = getRTMPActiveStreams(); - - log.info('[REMOVE ME] - Last peer - current active RTMP streams', activeStreams); + log.info('[Room Exit] - Current active RTMP streams:', getRTMPActiveStreams()); } socket.room_id = null; if (isPresenter) removeIP(socket); - callback('Successfully exited room'); - }); - - // common + if (callback) callback('Successfully exited room'); + } function getRoomAndPeer(socket) { const room = getRoom(socket); diff --git a/package.json b/package.json index 8cde4a74..f3345303 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.6.80", + "version": "1.6.81", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -82,7 +82,7 @@ "qs": "6.13.1", "socket.io": "4.8.1", "swagger-ui-express": "5.0.1", - "uuid": "11.0.3" + "uuid": "11.0.4" }, "devDependencies": { "mocha": "^11.0.1", diff --git a/public/js/Room.js b/public/js/Room.js index ac20d711..3ee44997 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -11,7 +11,7 @@ if (location.href.substr(0, 5) !== 'https') location.href = 'https' + location.h * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.6.80 + * @version 1.6.81 * */ @@ -4676,7 +4676,7 @@ function showAbout() { imageUrl: image.about, customClass: { image: 'img-about' }, position: 'center', - title: 'WebRTC SFU v1.6.80', + title: 'WebRTC SFU v1.6.81', html: `
diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 5f9bcce2..f3f1cfc0 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -9,7 +9,7 @@ * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.6.80 + * @version 1.6.81 * */ @@ -881,6 +881,8 @@ class RoomClient { // #################################################### initSockets() { + this.socket.on('connect', this.handleSocketConnect); + this.socket.on('disconnect', this.handleSocketDisconnect); this.socket.on('consumerClosed', this.handleConsumerClosed); this.socket.on('setVideoOff', this.handleSetVideoOff); this.socket.on('removeMe', this.handleRemoveMe); @@ -905,8 +907,6 @@ class RoomClient { this.socket.on('updateRoomModerator', this.handleUpdateRoomModeratorData); this.socket.on('updateRoomModeratorALL', this.handleUpdateRoomModeratorALLData); this.socket.on('recordingAction', this.handleRecordingActionData); - this.socket.on('connect', this.handleSocketConnect); - this.socket.on('disconnect', this.handleSocketDisconnect); this.socket.on('endRTMP', this.handleEndRTMP); this.socket.on('errorRTMP', this.handleErrorRTMP); this.socket.on('endRTMPfromURL', this.handleEndRTMPfromURL);