server.js 1.5 KB

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