server.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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.use(express.json());
  16. app.get('/', (req, res) => {
  17. res.redirect(`/${uuidV4()}`)
  18. })
  19. app.get('/:room', (req, res) => {
  20. res.render('room', { roomId: req.params.room, data: {} })
  21. })
  22. app.post('/', (req, res) => {
  23. res.redirect(307,`/${uuidV4()}`)
  24. })
  25. app.post('/:room', (req, res) => {
  26. let data = req.body;
  27. res.render('room', { roomId: req.params.room, data: data })
  28. })
  29. io.on('connection', socket => {
  30. socket.on('join-room', (roomId, userId) => {
  31. if(!(roomId in connectedClients)){
  32. connectedClients[roomId] = []
  33. }
  34. socket.emit('connected-clients', connectedClients[roomId]);
  35. connectedClients[roomId].push(userId)
  36. socket.join(roomId)
  37. socket.to(roomId).emit('user-connected', userId)
  38. socket.on('message', (msg) => {
  39. socket.to(roomId).emit('message', msg)
  40. })
  41. socket.on('disconnect', () => {
  42. socket.to(roomId).emit('user-disconnected', userId)
  43. const index = connectedClients[roomId].indexOf(socket.id)
  44. if (index !== -1) {
  45. connectedClients[roomId].splice(index, 1)
  46. if(connectedClients[roomId].length == 0){
  47. delete connectedClients[roomId]
  48. }
  49. }
  50. })
  51. })
  52. })
  53. server.listen(4230)
  54. process.on('SIGTERM', () => {
  55. console.info("Interrupted");
  56. process.exit(0);
  57. })