-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
71 lines (63 loc) · 2.38 KB
/
server.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
59
60
61
62
63
64
65
66
67
68
69
70
71
const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const cors = require('cors')
const PORT = process.env.PORT || 5000;
app.set('view engine', 'ejs')
app.use(express.static('assets'))
app.use(express.urlencoded({ extended: true }))
app.use(cors())
const rooms = {}
app.get('/', (req, res) => {
res.render('index', { rooms })
})
app.post('/room', (req, res) => {
if (rooms[req.body.room] != null) {
return res.redirect('/')
}
rooms[req.body.room] = { users: {},messages:[] }
res.redirect("/room/" + req.body.room)
// Send message that new room was created
io.emit('room-created', {room:req.body.room,users:rooms[req.body.room].users})
})
app.get('/room/:room', (req, res) => {
if (rooms[req.params.room] == null) {
return res.redirect('/')
}
res.render('room', { roomName: req.params.room })
})
server.listen(PORT)
io.on('connection', socket => {
socket.on('new-user', (room, name) => {
socket.join(room)
rooms[room].users[socket.id] = name
io.emit("user-count-update",{room,count:Object.keys(rooms[room].users).length})
socket.to(room).broadcast.emit('user-connected', name)
})
socket.on('send-chat-message', (room, message) => {
console.log(rooms);
rooms[room].messages.push({message,name:rooms[room].users[socket.id]})
socket.to(room).broadcast.emit('chat-message', { message: message, name: rooms[room].users[socket.id] })
})
socket.on('disconnect', () => {
getUserRooms(socket).forEach(room => {
socket.to(room).broadcast.emit('user-disconnected', rooms[room].users[socket.id])
delete rooms[room].users[socket.id]
io.emit("user-count-update",{room,count:Object.keys(rooms[room].users).length})
if (Object.keys(rooms[room].users).length === 0) {
console.log("Room deleted");
delete rooms[room];
console.log(rooms)
io.emit("room-deleted", rooms)
}
socket.disconnect();
})
})
})
function getUserRooms(socket) {
return Object.entries(rooms).reduce((names, [name, room]) => {
if (room.users[socket.id] != null) names.push(name)
return names
}, [])
}