index.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const express = require('express');
  2. const cors = require('cors')
  3. var app = express()
  4. var http = require('http').Server(app);
  5. var io = require('socket.io')(http);
  6. const jwtSecret = 'AjnjLhjxM'
  7. const { verify } = require('jsonwebtoken')
  8. app.use(express.static('public'))
  9. app.use(cors())
  10. let gamers = []
  11. let cleanSocket = gamer => {
  12. let {socket, ...copy} = gamer
  13. return copy
  14. }
  15. let emitGamers = () => io.emit('gamers', gamers.map(cleanSocket))
  16. let thisGamer = s => gamers.filter(g => g.socket === s) [0]
  17. let gamerById = id => gamers.filter(g => g.id === id)[0]
  18. const dice = () => Math.ceil(Math.random()*6)
  19. const startBoard = () => [
  20. {color: 'white', count: 15},
  21. , , , , , , , , , , ,
  22. {color: 'black', count: 15},
  23. , , , , , , , , , , ,
  24. ]
  25. io.on('connection', socket => {
  26. socket.emit('hi', {id: socket.id})
  27. socket.on('disconnect', () => {
  28. gamers = gamers.filter(n => n.socket !== socket)
  29. emitGamers()
  30. });
  31. socket.on('conn', token => {
  32. const decoded = verify(token, jwtSecret)
  33. if (decoded){
  34. gamers.push({nick: decoded.sub.login, socket: socket, id: socket.id})
  35. }
  36. else {
  37. socket.emit("error", 'jwt failed')
  38. }
  39. emitGamers()
  40. })
  41. socket.on('newGame', msg => {
  42. let gamer = thisGamer(socket)
  43. gamer.newGame = msg.newGame
  44. emitGamers()
  45. })
  46. socket.on('startGame', ({id}) => {
  47. let gamer = thisGamer(socket)
  48. let enemy = gamerById(id)
  49. //console.log(id, gamers)
  50. if (enemy && enemy.newGame){
  51. gamer.inGameWith = enemy.id
  52. enemy.inGameWith = gamer.id
  53. gamer.turn = Math.random() > 0.5
  54. enemy.turn = !gamer.turn
  55. }
  56. gamer.socket.emit('startGame', cleanSocket(gamer))
  57. enemy.socket.emit('startGame', cleanSocket(enemy))
  58. if (gamer.turn) gamer.socket.emit('turn', {board: startBoard(), dice: [dice(), dice()]})
  59. else enemy.socket.emit('turn', {board: startBoard(), dice: [dice(), dice()]})
  60. emitGamers()
  61. })
  62. socket.on('turn', data => {
  63. let gamer = thisGamer(socket)
  64. let enemy = gamerById(gamer.inGameWith)
  65. if (gamer && enemy &&
  66. gamer.inGameWith === enemy.id &&
  67. enemy.inGameWith === gamer.id &&
  68. gamer.turn){
  69. gamer.turn = !gamer.turn
  70. enemy.turn = !enemy.turn
  71. data.dice = [dice(), dice()]
  72. enemy.socket.emit('turn', data)
  73. }
  74. })
  75. });
  76. http.listen(4000, function(){
  77. console.log(`listening`);
  78. });