From 6df9d1dd40bb12de68aa18ece830d8047713e361 Mon Sep 17 00:00:00 2001 From: talksik Date: Sun, 19 Jun 2022 12:38:40 -0500 Subject: [PATCH] one way of removing stream on someone leaving room --- .../src/providers/ConversationProvider.tsx | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/desktop/src/providers/ConversationProvider.tsx b/packages/desktop/src/providers/ConversationProvider.tsx index 507bbfe..fcd8d73 100644 --- a/packages/desktop/src/providers/ConversationProvider.tsx +++ b/packages/desktop/src/providers/ConversationProvider.tsx @@ -642,6 +642,8 @@ function Room({ } }); + console.error('peer connection was closed'); + toast.error('peer connection was closed'); }); @@ -672,13 +674,33 @@ function Room({ }; }, [userLocalStream]); + // find when someone leaves the room and destroy peer and remove them from our map + useEffect(() => { + // go through tuned in users + // if we have someone in room who is not in tuned in, then destroy + delete + if (conversation.room) { + Object.entries(conversation.room).forEach(([roomUserId, roomContents]) => { + if (!conversation.tunedInUsers.includes(roomUserId)) { + console.log('someone left the room!!!'); + + roomContents.peer.destroy(); + + setConversationMap((draft) => { + delete draft[conversation._id.toString()].room[roomUserId]; + }); + } + }); + } + }, [conversation.tunedInUsers, conversation.room]); + // go through all of the peers and destroy and update conversation map useUnmount(() => { setConversationMap((draft) => { if (draft[conversation._id.toString()].room) { Object.values(draft[conversation._id.toString()].room).forEach((roomPeerContents) => { roomPeerContents.peer.destroy(); - toast('destroyed peer connection as I am leaving room'); + + console.log('destroyed peer connection as I am leaving room'); }); }