websocket-chat / dist /handlers /MessageHandler.js
harsh-dev's picture
rename fix
3a72b90 unverified
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