-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsocket.js
54 lines (43 loc) · 1.15 KB
/
socket.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
const config = require("config");
const socketio = require("socket.io");
const User = require("./models/user");
const Event = require("./models/event");
module.exports = (server, session) => {
const io = socketio(server);
io.use((socket, next) => session(socket.request, {}, next));
io.on("connection", async (socket) => {
console.log(`Socket ${socket.id} connected`);
socket.on("disconnect", () => {
console.log(`Socket ${socket.id} disconnected`);
});
socket.on("disconnecting", () => {
[...socket.rooms]
.filter((room) => room != socket.id)
.forEach((room) => {
socket.to(room).emit("user-leave", room);
});
});
// refuse connection if no user id has been set
if (!socket.request.session.userId) {
console.log("user does not have a user id");
socket.disconnect();
}
const { userId } = socket.request.session;
socket.data.userId = userId;
const events = await Event.find({
$or: [
{
participants: userId,
},
{
organisators: userId,
},
],
});
events.forEach((event) => {
socket.to(event.code).emit("user-join", event.code);
socket.join(event.code);
});
});
return io;
};