const express = require('express') const app = express() // const server = require('http').Server(app) const fs = require('fs'); const options = { key: fs.readFileSync("server.key"), cert: fs.readFileSync("server.crt"), }; const server = require('https').createServer(options, app) const io = require('socket.io')(server) const { v4: uuidV4 } = require('uuid') const connectedClients = {} // {"roomId1": ["userId1", "userId2"], "roomId2" : ["userId3"]} app.set('view engine', 'ejs') app.use(express.static('public')) app.use(express.json()); app.get('/', (req, res) => { res.redirect(`/${uuidV4()}`) }) app.get('/:room', (req, res) => { res.render('room', { roomId: req.params.room, data: {} }) }) app.post('/', (req, res) => { res.redirect(307,`/${uuidV4()}`) }) app.post('/:room', (req, res) => { let data = req.body; res.render('room', { roomId: req.params.room, data: data }) }) io.on('connection', socket => { socket.on('join-room', (roomId, userId) => { if(!(roomId in connectedClients)){ connectedClients[roomId] = [] } socket.emit('connected-clients', connectedClients[roomId]); connectedClients[roomId].push(userId) socket.join(roomId) socket.to(roomId).emit('user-connected', userId) socket.on('message', (msg) => { socket.to(roomId).emit('message', msg) }) socket.on('disconnect', () => { socket.to(roomId).emit('user-disconnected', userId) const index = connectedClients[roomId].indexOf(socket.id) if (index !== -1) { connectedClients[roomId].splice(index, 1) if(connectedClients[roomId].length == 0){ delete connectedClients[roomId] } } }) }) }) server.listen(4230) process.on('SIGTERM', () => { console.info("Interrupted"); process.exit(0); })