-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
89 lines (73 loc) · 2.4 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const bodyParser = require('body-parser');
const { v4: uuidv4 } = require('uuid');
let port = process.env.PORT;
if (port == null || port == "") {
port = 3000;
}
let uniqueRoomName;
const rooms = {};
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.set('view engine', 'ejs');
app.use('/css', express.static('public/css'));
app.use('/js', express.static('public/js'));
app.use('/assets', express.static('public/assets'));
app.get('/', (req, res) => {
res.render('home');
});
app.post('/register_room', (req, res) => {
const roomName = req.body.name;
uniqueRoomName = `${roomName}${uuidv4()}`;
rooms[uniqueRoomName] = [];
res.redirect(`/${uniqueRoomName}/new_participant`);
});
app.get('/:roomId/new_participant', (req, res) => {
res.render('new_participant');
});
app.post('/register_participant', (req, res) => {
// const participantName = req.body.name;
res.redirect(`/room/${uniqueRoomName}`);
});
app.get('/room/:roomId', (req, res) => {
res.render('room', { roomId: req.params.roomId });
});
io.on('connection', (socket) => {
let room_id;
socket.on('join-room', (roomId) => {
room_id = roomId;
if (rooms[roomId]) {
rooms[roomId].push(socket.id);
} else {
rooms[roomId] = [socket.id];
}
console.log(`${socket.id} joined`, rooms[roomId]);
const otherUsers = rooms[roomId]?.filter((id) => id !== socket.id);
if (otherUsers?.length > 0) {
socket.emit('other-users', otherUsers);
}
});
socket.on('offer', ({ offer, target, caller }) => {
io.to(target).emit('offer', { caller, offer, target });
});
socket.on('answer', ({ caller, answer, target }) => {
io.to(caller).emit('answer', { answer, target });
});
socket.on('disconnect', () => {
// Remove disconnected user from room
if (rooms[room_id]) {
rooms[room_id] = rooms[room_id].filter((id) => id !== socket.id);
}
socket.broadcast.emit('user disonnected', { userId: socket.id });
});
socket.on('ice-candidate', ({ target, caller, candidate }) => {
io.to(target).emit('ice-candidate', {
caller,
candidateMessage: candidate,
});
});
});
server.listen(port, () => console.log('Server is now listening on port', port));