harsh-dev commited on
Commit
3a72b90
·
unverified ·
1 Parent(s): 7eec780

rename fix

Browse files
dist/handlers/MessageHandler.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"MessageHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/MessageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD,qBAAa,cAAc;IACvB,MAAM,CAAC,MAAM,CACT,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,WAAW,GACzB,IAAI;CAgFV"}
 
1
+ {"version":3,"file":"MessageHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/MessageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD,qBAAa,cAAc;IACvB,MAAM,CAAC,MAAM,CACT,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,WAAW,GACzB,IAAI;CAiIV"}
dist/handlers/MessageHandler.js CHANGED
@@ -21,6 +21,7 @@ export class MessageHandler {
21
  return;
22
  }
23
  const { room_id, username, message } = parsedData;
 
24
  // Normalize action to ensure case-insensitivity matches logic
25
  const action = parsedData.action.toLowerCase();
26
  switch (action) {
@@ -46,6 +47,38 @@ export class MessageHandler {
46
  }));
47
  }
48
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  case SocketAction.MESSAGE:
50
  roomManager.broadcast(room_id, JSON.stringify({
51
  message: `${message}`,
 
21
  return;
22
  }
23
  const { room_id, username, message } = parsedData;
24
+ let { new_username } = parsedData;
25
  // Normalize action to ensure case-insensitivity matches logic
26
  const action = parsedData.action.toLowerCase();
27
  switch (action) {
 
47
  }));
48
  }
49
  break;
50
+ case SocketAction.RENAME: {
51
+ if (!new_username) {
52
+ socket.send(JSON.stringify({
53
+ message: `somebody tried to steal ${new_username}!`,
54
+ username: username,
55
+ room_id,
56
+ action: 'rename',
57
+ status: 0,
58
+ }));
59
+ return;
60
+ }
61
+ const renamed = roomManager.renameUser(room_id, username, new_username, socket);
62
+ if (!renamed) {
63
+ socket.send(JSON.stringify({
64
+ message: `somebody tried to steal ${new_username}!`,
65
+ username: username,
66
+ room_id,
67
+ action: 'rename',
68
+ status: 0,
69
+ }));
70
+ return;
71
+ }
72
+ roomManager.broadcast(room_id, JSON.stringify({
73
+ message: `${username} is now known as ${new_username}`,
74
+ username: new_username,
75
+ old_username: username,
76
+ room_id,
77
+ action: 'rename',
78
+ status: 1,
79
+ }));
80
+ break;
81
+ }
82
  case SocketAction.MESSAGE:
83
  roomManager.broadcast(room_id, JSON.stringify({
84
  message: `${message}`,
dist/handlers/MessageHandler.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"MessageHandler.js","sourceRoot":"","sources":["../../src/handlers/MessageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,OAAO,cAAc;IACvB,MAAM,CAAC,MAAM,CACT,UAAkB,EAClB,MAAiB,EACjB,WAAwB;QAExB,IAAI,UAAe,CAAA;QAEnB,IAAI,CAAC;YACD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;YAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACjE,OAAM;QACV,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACpE,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,SAAS,CAAC;gBACX,KAAK,EAAE,8CAA8C;gBACrD,MAAM,EAAE,CAAC;aACZ,CAAC,CACL,CAAA;YACD,OAAM;QACV,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA;QACjD,8DAA8D;QAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAE9C,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,YAAY,CAAC,IAAI;gBAClB,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAC/C,WAAW,CAAC,SAAS,CACjB,OAAO,EACP,IAAI,CAAC,SAAS,CAAC;oBACX,OAAO,EAAE,GAAG,QAAQ,mBAAmB,OAAO,QAAQ;oBACtD,QAAQ,EAAE,GAAG,QAAQ,EAAE;oBACvB,OAAO,EAAE,GAAG,OAAO,EAAE;oBACrB,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,CAAC;iBACZ,CAAC,CACL,CAAA;gBACD,MAAK;YAET,KAAK,YAAY,CAAC,KAAK;gBACnB,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;gBAC3D,IAAI,UAAU,EAAE,CAAC;oBACb,WAAW,CAAC,SAAS,CACjB,OAAO,EACP,IAAI,CAAC,SAAS,CAAC;wBACX,OAAO,EAAE,GAAG,QAAQ,iBAAiB,OAAO,QAAQ;wBACpD,QAAQ,EAAE,GAAG,QAAQ,EAAE;wBACvB,OAAO,EAAE,GAAG,OAAO,EAAE;wBACrB,MAAM,EAAE,OAAO;wBACf,MAAM,EAAE,CAAC;qBACZ,CAAC,CACL,CAAA;gBACL,CAAC;gBACD,MAAK;YAET,KAAK,YAAY,CAAC,OAAO;gBACrB,WAAW,CAAC,SAAS,CACjB,OAAO,EACP,IAAI,CAAC,SAAS,CAAC;oBACX,OAAO,EAAE,GAAG,OAAO,EAAE;oBACrB,QAAQ,EAAE,GAAG,QAAQ,EAAE;oBACvB,OAAO,EAAE,GAAG,OAAO,EAAE;oBACrB,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,CAAC;iBACZ,CAAC,CACL,CAAA;gBACD,MAAK;YAET;gBACI,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,SAAS,CAAC;oBACX,KAAK,EAAE,mBAAmB,MAAM,EAAE;oBAClC,MAAM,EAAE,CAAC;iBACZ,CAAC,CACL,CAAA;gBACD,MAAK;QACb,CAAC;IACL,CAAC;CACJ"}
 
1
+ {"version":3,"file":"MessageHandler.js","sourceRoot":"","sources":["../../src/handlers/MessageHandler.ts"],"names":[],"mappings":"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"}
dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { WebSocketServer } from 'ws';
3
  import { RoomManager } from './services/RoomManager.js';
4
  import { MessageHandler } from './handlers/MessageHandler.js';
5
  const roomManager = new RoomManager();
6
- const PORT = 3001;
7
  const server = http.createServer((req, res) => {
8
  // Handle simple GET /
9
  if (req.method === 'GET' && req.url === '/') {
 
3
  import { RoomManager } from './services/RoomManager.js';
4
  import { MessageHandler } from './handlers/MessageHandler.js';
5
  const roomManager = new RoomManager();
6
+ const PORT = process.env.PORT || 7860;
7
  const server = http.createServer((req, res) => {
8
  // Handle simple GET /
9
  if (req.method === 'GET' && req.url === '/') {
dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;AAGrC,MAAM,IAAI,GAAG,IAAI,CAAA;AAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC1C,sBAAsB;IACtB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QAC1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;QACpD,GAAG,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;IAC3D,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;QACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACxB,CAAC;AACL,CAAC,CAAC,CAAA;AAEF,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAE3C,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAEhC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE;QAC7B,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAA;AAC7D,CAAC,CAAC,CAAA"}
 
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;AAGrC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAA;AAErC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC1C,sBAAsB;IACtB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QAC1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;QACpD,GAAG,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;IAC3D,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;QACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACxB,CAAC;AACL,CAAC,CAAC,CAAA;AAEF,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAE3C,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAEhC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE;QAC7B,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAA;AAC7D,CAAC,CAAC,CAAA"}
dist/services/RoomManager.d.ts CHANGED
@@ -7,6 +7,7 @@ export declare class RoomManager {
7
  * Creates the room if it doesn't exist.
8
  */
9
  joinRoom(roomId: string, username: string, socket: WebSocket): void;
 
10
  /**
11
  * Removes a user from a room.
12
  * Cleans up the room if it becomes empty.
 
7
  * Creates the room if it doesn't exist.
8
  */
9
  joinRoom(roomId: string, username: string, socket: WebSocket): void;
10
+ renameUser(roomId: string, username: string, newUsername: string, socket: WebSocket): boolean;
11
  /**
12
  * Removes a user from a room.
13
  * Cleans up the room if it becomes empty.
dist/services/RoomManager.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"RoomManager.d.ts","sourceRoot":"","sources":["../../src/services/RoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAE1B,qBAAa,WAAW;IAEpB,OAAO,CAAC,KAAK,CAAqC;;IAMlD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI;IAOnE;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYpD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAUnD"}
 
1
+ {"version":3,"file":"RoomManager.d.ts","sourceRoot":"","sources":["../../src/services/RoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAE1B,qBAAa,WAAW;IAEpB,OAAO,CAAC,KAAK,CAAqC;;IAMlD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI;IAOnE,UAAU,CACN,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,SAAS,GAClB,OAAO;IAeV;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYpD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAUnD"}
dist/services/RoomManager.js CHANGED
@@ -15,6 +15,20 @@ export class RoomManager {
15
  }
16
  this.rooms.get(roomId)?.set(username, socket);
17
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  /**
19
  * Removes a user from a room.
20
  * Cleans up the room if it becomes empty.
 
15
  }
16
  this.rooms.get(roomId)?.set(username, socket);
17
  }
18
+ renameUser(roomId, username, newUsername, socket) {
19
+ const room = this.rooms.get(roomId);
20
+ if (!room)
21
+ return false;
22
+ if (!room.has(username))
23
+ return false;
24
+ if (room.has(newUsername))
25
+ return false;
26
+ // Remove old username
27
+ room.delete(username);
28
+ // Add new username with same socket
29
+ room.set(newUsername, socket);
30
+ return true;
31
+ }
32
  /**
33
  * Removes a user from a room.
34
  * Cleans up the room if it becomes empty.
dist/services/RoomManager.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"RoomManager.js","sourceRoot":"","sources":["../../src/services/RoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAE1B,MAAM,OAAO,WAAW;IACpB,wCAAwC;IAChC,KAAK,CAAqC;IAElD;QACI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAiB;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACrC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,MAAc,EAAE,QAAgB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC7B,CAAC;YACD,OAAO,OAAO,CAAA;QAClB,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAc,EAAE,OAAe;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
 
1
+ {"version":3,"file":"RoomManager.js","sourceRoot":"","sources":["../../src/services/RoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAE1B,MAAM,OAAO,WAAW;IACpB,wCAAwC;IAChC,KAAK,CAAqC;IAElD;QACI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAiB;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACrC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IAED,UAAU,CACN,MAAc,EACd,QAAgB,EAChB,WAAmB,EACnB,MAAiB;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAEvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAA;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAA;QAEvC,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAErB,oCAAoC;QACpC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,MAAc,EAAE,QAAgB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC7B,CAAC;YACD,OAAO,OAAO,CAAA;QAClB,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAc,EAAE,OAAe;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC;QACL,CAAC;IACL,CAAC;CACJ"}
dist/types.d.ts CHANGED
@@ -1,7 +1,8 @@
1
  export declare enum SocketAction {
2
  JOIN = "join",
3
  LEAVE = "leave",
4
- MESSAGE = "message"
 
5
  }
6
  export interface WebSocketMessage {
7
  room_id: string;
 
1
  export declare enum SocketAction {
2
  JOIN = "join",
3
  LEAVE = "leave",
4
+ MESSAGE = "message",
5
+ RENAME = "rename"
6
  }
7
  export interface WebSocketMessage {
8
  room_id: string;
dist/types.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IACpB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,YAAY,CAAA;CACvB"}
 
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IACpB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,YAAY,CAAA;CACvB"}
dist/types.js CHANGED
@@ -3,5 +3,6 @@ export var SocketAction;
3
  SocketAction["JOIN"] = "join";
4
  SocketAction["LEAVE"] = "leave";
5
  SocketAction["MESSAGE"] = "message";
 
6
  })(SocketAction || (SocketAction = {}));
7
  //# sourceMappingURL=types.js.map
 
3
  SocketAction["JOIN"] = "join";
4
  SocketAction["LEAVE"] = "leave";
5
  SocketAction["MESSAGE"] = "message";
6
+ SocketAction["RENAME"] = "rename";
7
  })(SocketAction || (SocketAction = {}));
8
  //# sourceMappingURL=types.js.map
dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACpB,6BAAa,CAAA;IACb,+BAAe,CAAA;IACf,mCAAmB,CAAA;AACvB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB"}
 
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACpB,6BAAa,CAAA;IACb,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;AACrB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB"}
src/handlers/MessageHandler.ts CHANGED
@@ -31,7 +31,6 @@ export class MessageHandler {
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
 
@@ -67,10 +66,13 @@ export class MessageHandler {
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
  )
@@ -87,7 +89,10 @@ export class MessageHandler {
87
  if (!renamed) {
88
  socket.send(
89
  JSON.stringify({
90
- error: 'Username rename failed',
 
 
 
91
  status: 0,
92
  })
93
  )
 
31
 
32
  const { room_id, username, message } = parsedData
33
  let { new_username } = parsedData
 
34
  // Normalize action to ensure case-insensitivity matches logic
35
  const action = parsedData.action.toLowerCase()
36
 
 
66
  break
67
 
68
  case SocketAction.RENAME: {
69
+ if (!new_username) {
70
  socket.send(
71
  JSON.stringify({
72
+ message: `somebody tried to steal ${new_username}!`,
73
+ username: username,
74
+ room_id,
75
+ action: 'rename',
76
  status: 0,
77
  })
78
  )
 
89
  if (!renamed) {
90
  socket.send(
91
  JSON.stringify({
92
+ message: `somebody tried to steal ${new_username}!`,
93
+ username: username,
94
+ room_id,
95
+ action: 'rename',
96
  status: 0,
97
  })
98
  )