server.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const express = require('express')
  2. const app = express()
  3. const server = require('http').Server(app)
  4. const io = require('socket.io')(server)
  5. const { v4: uuidV4 } = require('uuid')
  6. const connectedClients = {} // {"roomId1": ["userId1", "userId2"], "roomId2" : ["userId3"]}
  7. app.set('view engine', 'ejs')
  8. app.use(express.static('public'))
  9. app.get('/', (req, res) => {
  10. res.redirect(`/${uuidV4()}`)
  11. })
  12. app.get('/:room', (req, res) => {
  13. res.render('room', { roomId: req.params.room })
  14. })
  15. io.on('connection', socket => {
  16. socket.on('join-room', (roomId, userId) => {
  17. if(!(roomId in connectedClients)){
  18. connectedClients[roomId] = []
  19. }
  20. socket.emit('connected-clients', connectedClients[roomId]);
  21. connectedClients[roomId].push(userId)
  22. socket.join(roomId)
  23. socket.to(roomId).emit('user-connected', userId)
  24. socket.on('disconnect', () => {
  25. socket.to(roomId).emit('user-disconnected', userId)
  26. const index = connectedClients[roomId].indexOf(socket.id)
  27. if (index !== -1) {
  28. connectedClients[roomId].splice(index, 1)
  29. if(connectedClients[roomId].length == 0){
  30. delete connectedClients[roomId]
  31. }
  32. }
  33. })
  34. })
  35. })
  36. server.listen(4230)
  37. process.on('SIGTERM', () => {
  38. console.info("Interrupted");
  39. process.exit(0);
  40. })