nice removing person when they leave

This commit is contained in:
talksik
2022-05-19 12:30:39 -05:00
parent d728a1283e
commit 5bac9a0b8b
2 changed files with 28 additions and 1 deletions
@@ -181,6 +181,33 @@ export function StreamProvider({ children }: { children: React.ReactChild }) {
[updatePeerMap],
);
useEffect(() => {
let allTunedInUsers = [];
Object.values(roomsMap).map((currentLine) => {
if (currentLine.tunedInMemberIds)
allTunedInUsers = [...currentLine.tunedInMemberIds, ...allTunedInUsers];
});
updatePeerMap((draft) => {
// go through peer map
// if there is someone in it who is not in a tuned in line, then destroy peer and remove
Object.entries(draft).map(([lineId, peerRelationsForLine]) => {
const usersToRemove = [];
peerRelationsForLine?.forEach((peerRelation, index) => {
if (!allTunedInUsers.includes(peerRelation.userId)) {
peerRelation.peer.destroy();
usersToRemove.push(peerRelation.userId);
}
});
draft[lineId] = draft[lineId].filter(
(peerRelation) => !usersToRemove.includes(peerRelation.userId),
);
});
});
}, [roomsMap, updatePeerMap]);
const handleGotPeerRemoteStream = useCallback(
(lineId: string, userId: string, remoteStream: MediaStream) => {
updatePeerMap((draft) => {
@@ -149,7 +149,7 @@ export default function LineDetails() {
return peerMap[lineId].map(
(linePeer) =>
linePeer.peerMediaStream && (
linePeer?.peerMediaStream && (
<StreamPlayer
key={`streamPlayer-${index}`}
peerStream={linePeer.peerMediaStream}