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