@@ -42,6 +42,8 @@ var destructiveRateLimits = new Map();
4242var constructiveRateLimits = new Map ( ) ;
4343/** @type {Map<string, Map<string, BoardUser>> } */
4444var boardUsers = new Map ( ) ;
45+ /** @type {Map<string, AppSocket> } */
46+ var activeSockets = new Map ( ) ;
4547var connectedUsersTotal = 0 ;
4648/** @type {{
4749 * board: string,
@@ -492,6 +494,14 @@ function closeSocket(socket, eventName, infos) {
492494 socket . disconnect ( true ) ;
493495}
494496
497+ /**
498+ * @param {string } socketId
499+ * @returns {AppSocket | undefined }
500+ */
501+ function getActiveSocket ( socketId ) {
502+ return activeSockets . get ( socketId ) ;
503+ }
504+
495505/**
496506 * @param {AppSocket } socket
497507 * @param {string } eventName
@@ -1071,6 +1081,8 @@ function getBoard(name) {
10711081 * @param {AppSocket } socket
10721082 */
10731083function handleSocketConnection ( socket ) {
1084+ activeSockets . set ( socket . id , socket ) ;
1085+
10741086 /**
10751087 * Function to call when an user joins a board
10761088 * @param {string } name
@@ -1480,6 +1492,23 @@ function handleSocketConnection(socket) {
14801492 reporter_name : lastUserReportLog . reporter_name ,
14811493 reported_name : lastUserReportLog . reported_name ,
14821494 } ) ;
1495+
1496+ var socketsToDisconnect = [ socket ] ;
1497+ var reportedSocket = getActiveSocket ( reported . socketId ) ;
1498+ if ( reportedSocket && reportedSocket !== socket ) {
1499+ socketsToDisconnect . push ( reportedSocket ) ;
1500+ }
1501+
1502+ socketsToDisconnect . forEach (
1503+ function disconnectReportedUser (
1504+ /** @type {AppSocket } */ targetSocket ,
1505+ ) {
1506+ closeSocket ( targetSocket , "report_user" , {
1507+ board : boardName ,
1508+ socket : targetSocket . id ,
1509+ } ) ;
1510+ } ,
1511+ ) ;
14831512 } ,
14841513 ) ;
14851514 } , "report_user" ) ,
@@ -1488,6 +1517,7 @@ function handleSocketConnection(socket) {
14881517 socket . on (
14891518 "disconnecting" ,
14901519 function onDisconnecting ( /** @type {string } */ reason ) {
1520+ activeSockets . delete ( socket . id ) ;
14911521 socket . rooms . forEach (
14921522 async function disconnectFrom ( /** @type {string } */ room ) {
14931523 if ( boards . hasOwnProperty ( room ) ) {
@@ -1605,6 +1635,7 @@ if (exports) {
16051635 destructiveRateLimits . clear ( ) ;
16061636 constructiveRateLimits . clear ( ) ;
16071637 boardUsers . clear ( ) ;
1638+ activeSockets . clear ( ) ;
16081639 lastUserReportLog = null ;
16091640 } ,
16101641 } ;
0 commit comments