const io = require('socket.io')(3555); const nsp = io.of('/randomFree'); const crypto = require('crypto-js'); const cryptoSHA256= crypto.SHA256; class randomFree { constructor() { nsp.on('connection', (socket) => { console.log('someone connected'); socket.join('queue'); this.match(); }); } match() { nsp.in('queue').clients((error, clients) => { if (error) throw error; if(clients.length > 1) { let p1 = nsp.sockets[clients[0]]; let p2 = nsp.sockets[clients[1]]; const channel = clients[0] + clients[1]; let err = (e) => { if(e)throw e; return 0; }; p1.leave('queue', err); p1.join(channel, err); p2.leave('queue', err); p2.join(channel, err); // setTimeout(() => { // console.log("MATCH: " +channel+ " !"); // console.log(Object.keys(nsp.in(channel).sockets)); // console.log("QUEUE!"); // console.log(Object.keys(nsp.in('queue').sockets)); // }, 5000); nsp.in(channel).clients((err, clients) => { console.log('Channel: ' + channel); console.log(clients); let matchInfo = this.joinGame(p1, p2); //possible change to 'joinFreeRandomGame' ? p1.emit('joinGame', matchInfo.playerOneState); p2.emit('joinGame', matchInfo.playerTwoState); }); } nsp.in('queue').clients((err, clients) => { console.log('Queue'); console.log(clients) }); }); } joinGame(playerOne, playerTwo){ let playerOneCards = this.createRandomCards(); let playerTwoCards = this.createRandomCards(); let setup = this.createSetupArray(playerOne, playerTwo, playerOneCards, playerTwoCards); let playerOneState = {cards: playerOneCards, setup: setup}; let playerTwoState = {cards: playerTwoCards, setup: setup}; return {playerOneState, playerTwoState}; } createSetupArray(playerOne, playerTwo, playerOneCards, playerTwoCards){ let id = { playerOne: playerOne, playerTwo: playerTwo, }; let cards = { playerOne: playerOneCards.hashedCardsArray, playerTwo: playerTwoCards.hashedCardsArray, }; let setup = {id, cards }; return setup; } createRandomCards(){ let playerCardsArray = []; let saltArray = []; let hashedCardsArray= []; for (let i =0; i<5; i++){ let playerCard = Math.floor((Math.random()*100 )% 100 ); let salt = crypto.lib.WordArray.random(128 / 8).toString(); let hashedCard = cryptoSHA256(playerCard.toString + salt); playerCardsArray.push(playerCard); saltArray.push(salt); hashedCardsArray.push(hashedCard); } return {playerCardsArray, saltArray, hashedCardsArray}; } } module.exports = new randomFree();