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]]; p1.emit('test'); p2.emit('test'); 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); nsp.in(channel).clients((err, clients) => { console.log('Channel: ' + channel); console.log(clients); let matchInfo = this.joinGame(p1.id, p2.id); //possible change to 'joinFreeRandomGame' ? console.log("Joining Game"); p1.emit('joinGame', matchInfo.playerOneState); p2.emit('joinGame', matchInfo.playerTwoState); const broadcast = (data) => { nsp.in(channel).emit('move', data); }; p1.on('broadcast', broadcast); p2.on('broadcast', broadcast); }); } 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.toString()); } return {playerCardsArray, saltArray, hashedCardsArray}; } } module.exports = new randomFree();