harsh-dev commited on
Commit
7eec780
·
unverified ·
1 Parent(s): a7476ec
src/handlers/MessageHandler.ts CHANGED
@@ -30,6 +30,8 @@ export class MessageHandler {
30
  }
31
 
32
  const { room_id, username, message } = parsedData
 
 
33
  // Normalize action to ensure case-insensitivity matches logic
34
  const action = parsedData.action.toLowerCase()
35
 
@@ -64,6 +66,48 @@ export class MessageHandler {
64
  }
65
  break
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  case SocketAction.MESSAGE:
68
  roomManager.broadcast(
69
  room_id,
 
30
  }
31
 
32
  const { room_id, username, message } = parsedData
33
+ let { new_username } = parsedData
34
+ if (!new_username) new_username = username
35
  // Normalize action to ensure case-insensitivity matches logic
36
  const action = parsedData.action.toLowerCase()
37
 
 
66
  }
67
  break
68
 
69
+ case SocketAction.RENAME: {
70
+ if (!new_username || new_username === username) {
71
+ socket.send(
72
+ JSON.stringify({
73
+ error: 'Invalid new username',
74
+ status: 0,
75
+ })
76
+ )
77
+ return
78
+ }
79
+
80
+ const renamed = roomManager.renameUser(
81
+ room_id,
82
+ username,
83
+ new_username,
84
+ socket
85
+ )
86
+
87
+ if (!renamed) {
88
+ socket.send(
89
+ JSON.stringify({
90
+ error: 'Username rename failed',
91
+ status: 0,
92
+ })
93
+ )
94
+ return
95
+ }
96
+
97
+ roomManager.broadcast(
98
+ room_id,
99
+ JSON.stringify({
100
+ message: `${username} is now known as ${new_username}`,
101
+ username: new_username,
102
+ old_username: username,
103
+ room_id,
104
+ action: 'rename',
105
+ status: 1,
106
+ })
107
+ )
108
+ break
109
+ }
110
+
111
  case SocketAction.MESSAGE:
112
  roomManager.broadcast(
113
  room_id,
src/services/RoomManager.ts CHANGED
@@ -19,6 +19,26 @@ export class RoomManager {
19
  this.rooms.get(roomId)?.set(username, socket)
20
  }
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  /**
23
  * Removes a user from a room.
24
  * Cleans up the room if it becomes empty.
 
19
  this.rooms.get(roomId)?.set(username, socket)
20
  }
21
 
22
+ renameUser(
23
+ roomId: string,
24
+ username: string,
25
+ newUsername: string,
26
+ socket: WebSocket
27
+ ): boolean {
28
+ const room = this.rooms.get(roomId)
29
+ if (!room) return false
30
+
31
+ if (!room.has(username)) return false
32
+ if (room.has(newUsername)) return false
33
+
34
+ // Remove old username
35
+ room.delete(username)
36
+
37
+ // Add new username with same socket
38
+ room.set(newUsername, socket)
39
+ return true
40
+ }
41
+
42
  /**
43
  * Removes a user from a room.
44
  * Cleans up the room if it becomes empty.
src/types.ts CHANGED
@@ -2,6 +2,7 @@ export enum SocketAction {
2
  JOIN = 'join',
3
  LEAVE = 'leave',
4
  MESSAGE = 'message',
 
5
  }
6
 
7
  export interface WebSocketMessage {
 
2
  JOIN = 'join',
3
  LEAVE = 'leave',
4
  MESSAGE = 'message',
5
+ RENAME = 'rename',
6
  }
7
 
8
  export interface WebSocketMessage {