-
-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathindex.js
More file actions
95 lines (76 loc) · 2.76 KB
/
index.js
File metadata and controls
95 lines (76 loc) · 2.76 KB
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
const express = require('express');
const mongoose = require('mongoose');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const http = require('http');
const { Server } = require("socket.io");
const Room = require('./models/Room');
const Code = require('./models/Code')
//routers
const roomRouter = require('./routes/roomRoute');
const codeRouter = require('./routes/codeRoute');
const port = 5000;
const app = express();
const server = http.createServer(app);
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(cors({
origin: "http://localhost:3000",
credentials: true,
allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Authorization"]
}));
app.use('/api/room', roomRouter);
app.use('/api/code',codeRouter);
mongoose.connect("mongodb+srv://testing_node:test1234@cluster0.jriry7x.mongodb.net/customDb?retryWrites=true&w=majority&appName=Cluster0")
.then((success) => console.log("Connected to MongoDB"))
.catch(err => console.log("Error connecting"));
server.listen(port, () => {
console.log(`Running on port ${port}`);
})
const io = new Server(server, {
cors: {
origin: "http://localhost:3000",
credentials: true,
allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Authorization"]
}
})
//Mapping room to the list of socket user
let userRoomMap = new Map();
let socketIdMap = new Map();
io.on('connection', (socket) => {
console.log(`${socket.id} connected`);
socket.on('joinroom', async ({ roomId }) => {
if (!userRoomMap.get(roomId)) {
userRoomMap.set(roomId, [socket.id]);
socketIdMap.set(socket.id, roomId);
socket.join(roomId);
}
else {
const socketIds = userRoomMap.get(roomId);
if (!socketIds.includes(socket.id)) {
socketIds.push(socket.id);
socketIdMap.set(socket.id, roomId);
socket.join(roomId);
}
}
socket.emit('welcomeToRoom', { userlist: userRoomMap.get(roomId) })
//console.log(userRoomMap);
})
socket.on('codeChange', async ({ roomId, code, lang }) => {
const decodedLang=decodeURIComponent(lang);
await Code.findOneAndUpdate({ room: roomId,language:decodedLang},
{ $set: { code: code } },
{ new: true }
)
socket.to(roomId).emit('syncCode', { code });
})
socket.on('disconnect', async () => {
const roomId = socketIdMap.get(socket.id);
if (userRoomMap.get(roomId)) {
const arr = userRoomMap.get(roomId);
userRoomMap.set(roomId, arr.filter(id => id != socket.id))
}
//console.log(userRoomMap);
})
})