From 56ceef1ce22e281181c59d1eba68ab0b590f25dc Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 13 Mar 2024 10:28:11 +0100 Subject: [PATCH] [mirotalksfu] - refactoring --- app/src/Peer.js | 6 +++++- app/src/Room.js | 18 +++++++++++++++--- app/src/Server.js | 41 ++++++++++++++++++++++++++++++++++------- 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/app/src/Peer.js b/app/src/Peer.js index 78216d36..a83475d1 100644 --- a/app/src/Peer.js +++ b/app/src/Peer.js @@ -76,11 +76,15 @@ module.exports = class Peer { } async connectTransport(transport_id, dtlsParameters) { - if (!this.transports.has(transport_id)) return; + if (!this.transports.has(transport_id)) { + return false; + } await this.transports.get(transport_id).connect({ dtlsParameters: dtlsParameters, }); + + return true; } close() { diff --git a/app/src/Room.js b/app/src/Room.js index 1ad5fffc..cfa31fdc 100644 --- a/app/src/Room.js +++ b/app/src/Room.js @@ -234,7 +234,7 @@ module.exports = class Room { const { maxIncomingBitrate, initialAvailableOutgoingBitrate, listenInfos } = this.webRtcTransport; const webRtcTransportOptions = { - ...(this.webRtcServerActive ? { webRtcServer: this.webRtcServer } : { listenInfos }), + ...(this.webRtcServerActive ? { webRtcServer: this.webRtcServer } : { listenInfos: listenInfos }), enableUdp: true, enableTcp: true, preferUdp: true, @@ -319,7 +319,16 @@ module.exports = class Room { return this.printError(`[Room|connectPeerTransport] Peer with socket ID ${socket_id} not found`); } - await this.peers.get(socket_id).connectTransport(transport_id, dtlsParameters); + const peer = this.peers.get(socket_id); + + const connectTransport = await peer.connectTransport(transport_id, dtlsParameters); + + if (!connectTransport) { + return this.printError( + `[Room|connectPeerTransport] error: Transport with ID ${transport_id} not found`, + ); + } + return '[Room|connectPeerTransport] done'; } catch (error) { log.error('Error connecting peer transport', error.message); @@ -427,7 +436,10 @@ module.exports = class Room { closeProducer(socket_id, producer_id) { if (!socket_id || !producer_id || !this.peers.has(socket_id)) return; - this.peers.get(socket_id).closeProducer(producer_id); + + const peer = this.peers.get(socket_id); + + peer.closeProducer(producer_id); } // #################################################### diff --git a/app/src/Server.js b/app/src/Server.js index abb1c6e3..55f873d8 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -964,7 +964,9 @@ function startServer() { ? is_presenter : await isPeerPresenter(socket.room_id, socket.id, peer_name, peer_uuid); - room.getPeers().get(socket.id).updatePeerInfo({ type: 'presenter', status: isPresenter }); + const peer = room.getPeers().get(socket.id); + + peer.updatePeerInfo({ type: 'presenter', status: isPresenter }); log.info('[Join] - Is presenter', { roomId: socket.room_id, @@ -1070,7 +1072,9 @@ function startServer() { status: true, }; - await room.getPeers().get(socket.id).updatePeerInfo(data); + const peer = room.getPeers().get(socket.id); + + peer.updatePeerInfo(data); try { const producer_id = await room.produce( @@ -1138,8 +1142,11 @@ function startServer() { const room = roomList.get(socket.room_id); + const peer = room.getPeers().get(socket.id); + // peer_info audio Or video OFF - room.getPeers().get(socket.id).updatePeerInfo(data); + peer.updatePeerInfo(data); + room.closeProducer(socket.id, data.producer_id); }); @@ -1150,7 +1157,15 @@ function startServer() { const peer_name = getPeerName(room, false); - const producer = room.getPeers()?.get(socket.id)?.getProducer(producer_id); + const peer = room.getPeers().get(socket.id); + + if (!peer) { + return callback({ + error: `peer with ID: ${socket.id} for producer with id "${producer_id}" not found`, + }); + } + + const producer = peer.getProducer(producer_id); if (!producer) { return callback({ error: `producer with id "${producer_id}" not found` }); @@ -1174,7 +1189,15 @@ function startServer() { const peer_name = getPeerName(room, false); - const producer = room.getPeers()?.get(socket.id)?.getProducer(producer_id); + const peer = room.getPeers().get(socket.id); + + if (!peer) { + return callback({ + error: `peer with ID: "${socket.id}" for producer with id "${producer_id}" not found`, + }); + } + + const producer = peer.getProducer(producer_id); if (!producer) { return callback({ error: `producer with id "${producer_id}" not found` }); @@ -1227,7 +1250,9 @@ function startServer() { switch (data.type) { case 'privacy': - room.getPeers().get(socket.id).updatePeerInfo({ type: data.type, status: data.active }); + const peer = room.getPeers().get(socket.id); + + peer.updatePeerInfo({ type: data.type, status: data.active }); break; case 'ejectAll': const { peer_name, peer_uuid } = data; @@ -1388,7 +1413,9 @@ function startServer() { const room = roomList.get(socket.room_id); - room.getPeers().get(socket.id).updatePeerInfo(data); + const peer = room.getPeers().get(socket.id); + + peer.updatePeerInfo(data); if (data.broadcast) { log.debug('updatePeerInfo broadcast data');