Spaces:
Sleeping
Sleeping
File size: 3,951 Bytes
a7476ec 3a72b90 a7476ec 3a72b90 a7476ec | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | import WebSocket from 'ws';
import { RoomManager } from '../services/RoomManager.js';
import { SocketAction } from '../types.js';
export class MessageHandler {
static handle(rawMessage, socket, roomManager) {
let parsedData;
try {
parsedData = JSON.parse(rawMessage);
}
catch (error) {
console.error('Error parsing JSON:', error);
socket.send(JSON.stringify({ error: 'Invalid JSON', status: 0 }));
return;
}
// Basic validation to ensure required fields exist
if (!parsedData.room_id || !parsedData.username || !parsedData.action) {
socket.send(JSON.stringify({
error: 'Missing fields: room_id, username, or action',
status: 0,
}));
return;
}
const { room_id, username, message } = parsedData;
let { new_username } = parsedData;
// Normalize action to ensure case-insensitivity matches logic
const action = parsedData.action.toLowerCase();
switch (action) {
case SocketAction.JOIN:
roomManager.joinRoom(room_id, username, socket);
roomManager.broadcast(room_id, JSON.stringify({
message: `${username} has joined the ${room_id} chat!`,
username: `${username}`,
room_id: `${room_id}`,
action: `join`,
status: 1,
}));
break;
case SocketAction.LEAVE:
const clientLeft = roomManager.leaveRoom(room_id, username);
if (clientLeft) {
roomManager.broadcast(room_id, JSON.stringify({
message: `${username} has left the ${room_id} chat!`,
username: `${username}`,
room_id: `${room_id}`,
action: `leave`,
status: 1,
}));
}
break;
case SocketAction.RENAME: {
if (!new_username) {
socket.send(JSON.stringify({
message: `somebody tried to steal ${new_username}!`,
username: username,
room_id,
action: 'rename',
status: 0,
}));
return;
}
const renamed = roomManager.renameUser(room_id, username, new_username, socket);
if (!renamed) {
socket.send(JSON.stringify({
message: `somebody tried to steal ${new_username}!`,
username: username,
room_id,
action: 'rename',
status: 0,
}));
return;
}
roomManager.broadcast(room_id, JSON.stringify({
message: `${username} is now known as ${new_username}`,
username: new_username,
old_username: username,
room_id,
action: 'rename',
status: 1,
}));
break;
}
case SocketAction.MESSAGE:
roomManager.broadcast(room_id, JSON.stringify({
message: `${message}`,
username: `${username}`,
room_id: `${room_id}`,
action: `message`,
status: 1,
}));
break;
default:
socket.send(JSON.stringify({
error: `Unknown action: ${action}`,
status: 0,
}));
break;
}
}
}
//# sourceMappingURL=MessageHandler.js.map |