randomFree.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. const io = require('socket.io')(3555);
  2. const nsp = io.of('/randomFree');
  3. const crypto = require('crypto-js');
  4. const cryptoSHA256= crypto.SHA256;
  5. const GameMachine= require('../../game').GameMachine;
  6. let Users = require('../../database').Repositories.Users;
  7. class randomFree {
  8. constructor() {
  9. nsp.on('connection', (socket) => {
  10. console.log('Someone connected');
  11. socket.join('queue');
  12. socket.emit('test');
  13. this.match();
  14. });
  15. }
  16. match() {
  17. nsp.in('queue').clients((error, clients) => {
  18. if (error) throw error;
  19. if(clients.length > 1) {
  20. let p1 = nsp.sockets[clients[0]];
  21. let p2 = nsp.sockets[clients[1]];
  22. p1.emit('test');
  23. p2.emit('test');
  24. const channel = clients[0] + clients[1];
  25. console.log(channel);
  26. let err = (e) => {
  27. if(e)throw e;
  28. return 0;
  29. };
  30. p1.leave('queue', err);
  31. p1.join(channel, err);
  32. p2.leave('queue', err);
  33. p2.join(channel, err);
  34. let token1 = p1.request._query['token'];
  35. let token2 = p2.request._query['token'];
  36. // maybe i need to change to username
  37. nsp.in(channel).clients((err, clients) => {
  38. console.log('Channel: ' + channel);
  39. console.log(clients);
  40. let matchInfo = this.joinGame(token1, token2);
  41. //possible change to 'joinFreeRandomGame' ?
  42. console.log("Joining Game");
  43. p1.emit('joinGame', matchInfo.playerOneState);
  44. p2.emit('joinGame', matchInfo.playerTwoState);
  45. const broadcast = (data) => {
  46. data.timestamp = new Date().getTime();
  47. nsp.in(channel).emit('move', data);
  48. };
  49. p1.on('broadcast', broadcast);
  50. p2.on('broadcast', broadcast);
  51. const gameOver = (matchStack) => {
  52. // TODO this should be emitted ONLY if all 9 moves have been played
  53. let gameMachine = new GameMachine();
  54. let result;
  55. // result = gameService.lastMove(data);
  56. //TODO verify move stack (compare with hashed cards)
  57. nsp.in(channel).emit('result', result);
  58. };
  59. p1.once('gameOver', gameOver);
  60. p2.once('gameOver', gameOver);
  61. const dispute = (data) => {
  62. let result;
  63. // result. gameService.dispute(data);
  64. //may change to 'disputeResult'
  65. nsp.in(channel).emit('result', result);
  66. };
  67. p1.on('dispute', dispute);
  68. p2.on('dispute', dispute);
  69. });
  70. }
  71. nsp.in('queue').clients((err, clients) => {
  72. console.log('Queue');
  73. console.log(clients)
  74. });
  75. });
  76. }
  77. joinGame(playerOne, playerTwo){
  78. let playerOneCards = this.createRandomCards();
  79. let playerTwoCards = this.createRandomCards();
  80. let setup = this.createSetupArray(playerOne, playerTwo, playerOneCards, playerTwoCards);
  81. let playerOneState = {cards: playerOneCards, setup: setup};
  82. let playerTwoState = {cards: playerTwoCards, setup: setup};
  83. return {playerOneState, playerTwoState};
  84. }
  85. createSetupArray(playerOne, playerTwo, playerOneCards, playerTwoCards){
  86. let id = [
  87. playerOne,
  88. playerTwo
  89. ];
  90. let cards = [
  91. playerOneCards.hashedCardsArray,
  92. playerTwoCards.hashedCardsArray
  93. ];
  94. let setup = {id, cards };
  95. return setup;
  96. }
  97. createRandomCards(){
  98. let playerCardsArray = [];
  99. let saltArray = [];
  100. let hashedCardsArray= [];
  101. for (let i =0; i<5; i++){
  102. let playerCard = Math.floor((Math.random()*100 ) % 100 );
  103. let salt = crypto.lib.WordArray.random(128 / 8).toString();
  104. let hashedCard = cryptoSHA256(playerCard.toString() + salt);
  105. playerCardsArray.push(playerCard);
  106. saltArray.push(salt);
  107. hashedCardsArray.push(hashedCard.toString());
  108. }
  109. return {playerCardsArray, saltArray, hashedCardsArray};
  110. }
  111. }
  112. module.exports = new randomFree();