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
|
// Additional checks if kicking vs leaving
|
||||||
if (data.uids.length === 1 && parseInt(data.uids[0], 10) === caller.uid) {
|
if (data.uids.length === 1 && parseInt(data.uids[0], 10) === caller.uid) {
|
||||||
await messaging.leaveRoom([caller.uid], data.roomId);
|
await messaging.leaveRoom([caller.uid], data.roomId);
|
||||||
|
await socketHelpers.removeSocketsFromRoomByUids([caller.uid], data.roomId);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
await messaging.removeUsersFromRoom(caller.uid, data.uids, data.roomId);
|
await messaging.removeUsersFromRoom(caller.uid, data.uids, data.roomId);
|
||||||
|
await socketHelpers.removeSocketsFromRoomByUids(data.uids, data.roomId);
|
||||||
delete data.uids;
|
delete data.uids;
|
||||||
return chatsAPI.users(caller, data);
|
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));
|
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);
|
require('../promisify')(SocketHelpers);
|
||||||
|
|||||||
Reference in New Issue
Block a user