server.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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('message', (msg) => {
  25. socket.to(roomId).emit('message', msg)
  26. })
  27. socket.on('disconnect', () => {
  28. socket.to(roomId).emit('user-disconnected', userId)
  29. const index = connectedClients[roomId].indexOf(socket.id)
  30. if (index !== -1) {
  31. connectedClients[roomId].splice(index, 1)
  32. if(connectedClients[roomId].length == 0){
  33. delete connectedClients[roomId]
  34. }
  35. }
  36. })
  37. })
  38. })
  39. server.listen(4230)
  40. process.on('SIGTERM', () => {
  41. console.info("Interrupted");
  42. process.exit(0);
  43. })