const { getRoom, updateRoom } = require('../services/roomService'); const { sendToPlayersRolledNumber, sendWinner } = require('../socket/emits'); const { rollDice, isMoveValid } = require('./handlersFunctions'); module.exports = socket => { const req = socket.request; const handleMovePawn = async pawnId => { const room = await getRoom(req.session.roomId); if (room.winner) return; const pawn = room.getPawn(pawnId); if (isMoveValid(req.session, pawn, room)) { const newPositionOfMovedPawn = pawn.getPositionAfterMove(room.rolledNumber); room.changePositionOfPawn(pawn, newPositionOfMovedPawn); room.beatPawns(newPositionOfMovedPawn, req.session.color); // If player rolled a 6 they get another turn: keep same player but reset turn timer if (room.rolledNumber !== 6) { room.changeMovingPlayer(); } else { room.resetTurnForSamePlayer(); } const winner = room.getWinner(); if (winner) { room.endGame(winner); sendWinner(room._id.toString(), winner); } await updateRoom(room); } }; const handleRollDice = async () => { const rolledNumber = rollDice(); sendToPlayersRolledNumber(req.session.roomId, rolledNumber); const room = await updateRoom({ _id: req.session.roomId, rolledNumber: rolledNumber }); const player = room.getPlayer(req.session.playerId); if (!player.canMove(room, rolledNumber)) { room.changeMovingPlayer(); await updateRoom(room); } }; socket.on('game:roll', handleRollDice); socket.on('game:move', handleMovePawn); };