@@ -62,6 +62,18 @@ wss.on("connection", (socket, req) => __awaiter(void 0, void 0, void 0, function
6262 break ;
6363 case "disconnect_room" :
6464 for ( const [ roomId , connections ] of activeRooms . entries ( ) ) {
65+ const isMember = connections . some ( ( conn ) => conn . socket === socket ) ;
66+ if ( isMember ) {
67+ connections . forEach ( ( member ) => {
68+ if ( member . socket !== socket ) {
69+ member . socket . send ( JSON . stringify ( {
70+ type : "disconnect_room" ,
71+ userId : validMessage . data . userId ,
72+ roomId : roomId ,
73+ } ) ) ;
74+ }
75+ } ) ;
76+ }
6577 const updatedConnections = connections . filter ( ( conn ) => conn . socket !== socket ) ;
6678 if ( updatedConnections . length === 0 ) {
6779 activeRooms . delete ( roomId ) ;
@@ -194,13 +206,47 @@ wss.on("connection", (socket, req) => __awaiter(void 0, void 0, void 0, function
194206 }
195207 break ;
196208 }
209+ case "cursor" : {
210+ const socketList = activeRooms . get ( validMessage . data . roomId ) ;
211+ if ( ! ( socketList === null || socketList === void 0 ? void 0 : socketList . some ( ( conn ) => conn . userId === validMessage . data . userId && conn . socket === socket ) ) ) {
212+ socket . send ( JSON . stringify ( {
213+ type : "error_message" ,
214+ content : "Not connected to the room" ,
215+ } ) ) ;
216+ return ;
217+ }
218+ // Broadcast cursor position purely to other users in the room
219+ socketList === null || socketList === void 0 ? void 0 : socketList . forEach ( ( member ) => {
220+ if ( member . socket !== socket ) {
221+ member . socket . send ( JSON . stringify ( {
222+ type : "cursor" ,
223+ userId : validMessage . data . userId ,
224+ roomId : validMessage . data . roomId ,
225+ content : validMessage . data . content ,
226+ } ) ) ;
227+ }
228+ } ) ;
229+ break ;
230+ }
197231 }
198232 } ) ) ;
199233 socket . on ( "close" , ( ) => {
200234 const status = userVerificationStatus . get ( socket ) ;
201235 console . log ( `[WS Server] Connection closed for User: ${ ( status === null || status === void 0 ? void 0 : status . userId ) || 'unverified' } ` ) ;
202236 userVerificationStatus . delete ( socket ) ;
203237 for ( const [ roomId , connections ] of activeRooms . entries ( ) ) {
238+ const isMember = connections . some ( ( conn ) => conn . socket === socket ) ;
239+ if ( isMember && ( status === null || status === void 0 ? void 0 : status . userId ) ) {
240+ connections . forEach ( ( member ) => {
241+ if ( member . socket !== socket ) {
242+ member . socket . send ( JSON . stringify ( {
243+ type : "disconnect_room" ,
244+ userId : status . userId ,
245+ roomId : roomId ,
246+ } ) ) ;
247+ }
248+ } ) ;
249+ }
204250 const updatedConnections = connections . filter ( ( conn ) => conn . socket !== socket ) ;
205251 if ( updatedConnections . length === 0 ) {
206252 activeRooms . delete ( roomId ) ;
0 commit comments