From a766f74f0e38d8a96f806ff08bf723c6d228ace2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 15 Jul 2023 18:08:31 -0400 Subject: [PATCH] fix: on leave/kick remove matching sockets from rooms --- src/api/chats.js | 3 ++- src/socket.io/helpers.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/api/chats.js b/src/api/chats.js index 2d9c31a1fe..1df828075d 100644 --- a/src/api/chats.js +++ b/src/api/chats.js @@ -228,10 +228,11 @@ chatsAPI.kick = async (caller, data) => { // Additional checks if kicking vs leaving if (data.uids.length === 1 && parseInt(data.uids[0], 10) === caller.uid) { await messaging.leaveRoom([caller.uid], data.roomId); + await socketHelpers.removeSocketsFromRoomByUids([caller.uid], data.roomId); return []; } await messaging.removeUsersFromRoom(caller.uid, data.uids, data.roomId); - + await socketHelpers.removeSocketsFromRoomByUids(data.uids, data.roomId); delete data.uids; return chatsAPI.users(caller, data); }; diff --git a/src/socket.io/helpers.js b/src/socket.io/helpers.js index 4dd3a31dd4..36b3384d24 100644 --- a/src/socket.io/helpers.js +++ b/src/socket.io/helpers.js @@ -196,4 +196,19 @@ SocketHelpers.emitToUids = async function (event, data, uids) { uids.forEach(toUid => websockets.in(`uid_${toUid}`).emit(event, data)); }; +SocketHelpers.removeSocketsFromRoomByUids = async function (uids, roomId) { + const sockets = _.flatten( + await Promise.all(uids.map(uid => websockets.in(`uid_${uid}`).fetchSockets())) + ); + + for (const s of sockets) { + if (s.rooms.has(`chat_room_${roomId}`)) { + websockets.in(s.id).socketsLeave(`chat_room_${roomId}`); + } + if (s.rooms.has(`chat_room_public_${roomId}`)) { + websockets.in(s.id).socketsLeave(`chat_room_public_${roomId}`); + } + } +}; + require('../promisify')(SocketHelpers);