nice removing person when they leave
This commit is contained in:
@@ -181,6 +181,33 @@ export function StreamProvider({ children }: { children: React.ReactChild }) {
|
|||||||
[updatePeerMap],
|
[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(
|
const handleGotPeerRemoteStream = useCallback(
|
||||||
(lineId: string, userId: string, remoteStream: MediaStream) => {
|
(lineId: string, userId: string, remoteStream: MediaStream) => {
|
||||||
updatePeerMap((draft) => {
|
updatePeerMap((draft) => {
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ export default function LineDetails() {
|
|||||||
|
|
||||||
return peerMap[lineId].map(
|
return peerMap[lineId].map(
|
||||||
(linePeer) =>
|
(linePeer) =>
|
||||||
linePeer.peerMediaStream && (
|
linePeer?.peerMediaStream && (
|
||||||
<StreamPlayer
|
<StreamPlayer
|
||||||
key={`streamPlayer-${index}`}
|
key={`streamPlayer-${index}`}
|
||||||
peerStream={linePeer.peerMediaStream}
|
peerStream={linePeer.peerMediaStream}
|
||||||
|
|||||||
Reference in New Issue
Block a user