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