mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
fix: on leave/kick remove matching sockets from rooms
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user