-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsocketHandler.js
58 lines (50 loc) · 1.56 KB
/
socketHandler.js
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
const { CHAT_ROOMS, connectedUsers } = require('./config');
const { handleMessage } = require('./messageHandler');
function handleConnection(socket, io, filter) {
console.log('User connected:', socket.id);
socket.on('join_room', ({ room, username, password }) => {
if (!CHAT_ROOMS[room]) {
socket.emit('error', 'Room does not exist');
return;
}
// Check if the room is protected
if (CHAT_ROOMS[room].protected) {
// Validate password
if (password !== process.env.ADMIN_ROOM_PASSWORD) {
socket.emit('error', 'Invalid password');
return;
}
}
// Leave previous rooms
Array.from(socket.rooms).forEach((prevRoom) => {
if (prevRoom !== socket.id) {
socket.leave(prevRoom);
}
});
// Join new room
socket.join(room);
connectedUsers.set(socket.id, { username, room });
// Broadcast join message
socket.to(room).emit('user_joined', {
message: `${username} has joined the room`,
timestamp: new Date(),
});
// Send welcome message
socket.emit('room_joined', {
room,
message: `Welcome to ${CHAT_ROOMS[room].name}`,
});
});
socket.on('send_message', (data) => handleMessage(socket, io, filter, data));
socket.on('disconnect', () => {
const user = connectedUsers.get(socket.id);
if (user) {
socket.to(user.room).emit('user_left', {
message: `${user.username} has left the room`,
timestamp: new Date(),
});
connectedUsers.delete(socket.id);
}
});
}
module.exports = { handleConnection };