From 4bd50f4a6fd39f880d44e593b278cf5802f7d2da Mon Sep 17 00:00:00 2001 From: Wenszel Date: Thu, 9 Jun 2022 13:38:05 +0200 Subject: [PATCH] added rollednumber to room values --- backend/handlers/gameHandler.js | 150 +++++++++++++++----------------- backend/schemas/room.js | 1 + src/components/Gameboard.jsx | 17 ++-- 3 files changed, 79 insertions(+), 89 deletions(-) diff --git a/backend/handlers/gameHandler.js b/backend/handlers/gameHandler.js index abd51bd..4774ba5 100644 --- a/backend/handlers/gameHandler.js +++ b/backend/handlers/gameHandler.js @@ -8,37 +8,34 @@ const { getPositionAfterMove } = require('../utils/functions'); */ module.exports = (io, socket) => { const req = socket.request; + const roll = async () => { const rolledNumber = Math.ceil(Math.random() * 6); - req.session.reload(async err => { - if (err) return socket.disconnect(); - // Saving session data - req.session.rolledNumber = rolledNumber; - req.session.save(); - io.to(req.session.roomId.toString()).emit('game:roll', rolledNumber); - const isPossible = await isMovePossible(req.session.roomId, req.session.color, rolledNumber); - if (!isPossible) { - RoomModel.findOne({ _id: req.session.roomId }, (err, room) => { - // Updating moving player - const playerIndex = room.players.findIndex(player => player.nowMoving === true); - const roomSize = room.players.length; - room.players[playerIndex].nowMoving = false; - if (playerIndex + 1 === roomSize) { - room.players[0].nowMoving = true; - } else { - room.players[playerIndex + 1].nowMoving = true; - } - // Updating timer - room.nextMoveTime = Date.now() + 15000; - // Pushing above data to database - RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => { - if (err) return err; - io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room)); - io.to(req.session.roomId.toString()).emit('game:skip'); - }); - }); + const room = await RoomModel.findOne({ _id: req.session.roomId }).exec(); + room.rolledNumber = rolledNumber; + await RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room).exec(); + io.to(req.session.roomId.toString()).emit('game:roll', rolledNumber); + + const isPossible = await isMovePossible(req.session.roomId, req.session.color, rolledNumber); + if (!isPossible) { + const room = await RoomModel.findOne({ _id: req.session.roomId }).exec(); + const playerIndex = room.players.findIndex(player => player.nowMoving === true); + const roomSize = room.players.length; + room.players[playerIndex].nowMoving = false; + if (playerIndex + 1 === roomSize) { + room.players[0].nowMoving = true; + } else { + room.players[playerIndex + 1].nowMoving = true; } - }); + // Updating timer + room.nextMoveTime = Date.now() + 15000; + room.rolledNumber = null; + // Pushing above data to database + RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => { + if (err) return err; + io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room)); + }); + } }; /* Function responsible for check if any pawn of the player can move @@ -46,6 +43,7 @@ module.exports = (io, socket) => { Player's pawn can move if: 1) (if player's pawn is in base) if the rolled number is 1,6 2) (if player's pawn is near finish line) if the move does not go beyond the win line + Returns boolean */ const isMovePossible = async (roomId, playerColor, rolledNumber) => { let isMovePossible = false; @@ -66,61 +64,57 @@ module.exports = (io, socket) => { }; const skip = async () => { - await RoomModel.findOne({ _id: req.session.roomId }, (err, room) => { - if (room.nextMoveTime >= Date.now()) return err; - // Updating moving player - const playerIndex = room.players.findIndex(player => player.nowMoving === true); - const roomSize = room.players.length; - room.players[playerIndex].nowMoving = false; - if (playerIndex + 1 === roomSize) { - room.players[0].nowMoving = true; - } else { - room.players[playerIndex + 1].nowMoving = true; - } - // Updating timer - room.nextMoveTime = Date.now() + 15000; - setTimeout(skip, 15000); - // Pushing above data to database - RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => { - if (err) return err; - io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room)); - io.to(req.session.roomId.toString()).emit('game:skip'); - }); + const room = await RoomModel.findOne({ _id: req.session.roomId }).exec(); + if (room.nextMoveTime >= Date.now()) return; + // Updating moving player + const playerIndex = room.players.findIndex(player => player.nowMoving === true); + const roomSize = room.players.length; + room.players[playerIndex].nowMoving = false; + if (playerIndex + 1 === roomSize) { + room.players[0].nowMoving = true; + } else { + room.players[playerIndex + 1].nowMoving = true; + } + // Updating timer + room.nextMoveTime = Date.now() + 15000; + room.rolledNumber = null; + setTimeout(skip, 15000); + // Pushing above data to database + RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => { + if (err) return err; + io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room)); }); }; - const move = ({ pawnId }) => { - RoomModel.findOne({ _id: req.session.roomId }, function (err, room) { - if (!room) return err; - const pawnIndex = room.pawns.findIndex(pawn => pawn._id == pawnId); - room.pawns[pawnIndex].position = getPositionAfterMove(req.session.rolledNumber, room.pawns[pawnIndex]); - const pawnsOnPos = room.pawns.filter(pawn => pawn.position == room.pawns[pawnIndex].position); - pawnsOnPos.forEach(pawn => { - if (pawn.color !== req.session.color) { - const index = room.pawns.findIndex(i => i._id === pawn._id); - room.pawns[index].position = room.pawns[index].basePos; - } - }); - // Updating moving player - const playerIndex = room.players.findIndex(player => player.nowMoving === true); - const roomSize = room.players.length; - room.players[playerIndex].nowMoving = false; - if (playerIndex + 1 === roomSize) { - room.players[0].nowMoving = true; - } else { - room.players[playerIndex + 1].nowMoving = true; + const move = async ({ pawnId }) => { + const room = await RoomModel.findOne({ _id: req.session.roomId }).exec(); + const pawnIndex = room.pawns.findIndex(pawn => pawn._id == pawnId); + room.pawns[pawnIndex].position = getPositionAfterMove(room.rolledNumber, room.pawns[pawnIndex]); + const pawnsOnPos = room.pawns.filter(pawn => pawn.position == room.pawns[pawnIndex].position); + pawnsOnPos.forEach(pawn => { + if (pawn.color !== req.session.color) { + const index = room.pawns.findIndex(i => i._id === pawn._id); + room.pawns[index].position = room.pawns[index].basePos; } - // Updating timer - room.nextMoveTime = Date.now() + 15000; - setTimeout(skip, 15000); - // Pushing above data to database - RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, (err, updatedRoom) => { - if (!updatedRoom) return err; - io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room)); - io.to(req.session.roomId.toString()).emit('game:move'); - }); + }); + // Updating moving player + const playerIndex = room.players.findIndex(player => player.nowMoving === true); + const roomSize = room.players.length; + room.players[playerIndex].nowMoving = false; + if (playerIndex + 1 === roomSize) { + room.players[0].nowMoving = true; + } else { + room.players[playerIndex + 1].nowMoving = true; + } + // Updating timer + room.nextMoveTime = Date.now() + 15000; + room.rolledNumber = null; + setTimeout(skip, 15000); + // Pushing above data to database + RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, (err, updatedRoom) => { + if (!updatedRoom) return err; + io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room)); }); }; - socket.on('game:roll', roll); socket.on('game:move', move); socket.on('game:skip', skip); diff --git a/backend/schemas/room.js b/backend/schemas/room.js index 6e283b3..2ab83ce 100644 --- a/backend/schemas/room.js +++ b/backend/schemas/room.js @@ -7,6 +7,7 @@ var RoomSchema = new Schema({ started: { type: Boolean, default: false }, full: { type: Boolean, default: false }, nextMoveTime: Number, + rolledNumber: Number, players: [ { name: String, diff --git a/src/components/Gameboard.jsx b/src/components/Gameboard.jsx index 9ebec5b..5b37fd8 100644 --- a/src/components/Gameboard.jsx +++ b/src/components/Gameboard.jsx @@ -7,7 +7,7 @@ import Navbar from './Navbar'; const Gameboard = () => { // Context data const socket = useContext(SocketContext); - const context = useContext(PlayerDataContext); + const player = useContext(PlayerDataContext); // Render data const [pawns, setPawns] = useState([]); const [players, setPlayers] = useState([]); @@ -32,13 +32,7 @@ const Gameboard = () => { } }, [pawns]); useEffect(() => { - socket.emit('room:data', context.roomId); - socket.on('game:skip', () => { - setRolledNumber(null); - }); - socket.on('game:move', () => { - setRolledNumber(null); - }); + socket.emit('room:data', player.roomId); socket.on('room:data', data => { data = JSON.parse(data); // Filling navbar with empty player nick container @@ -48,17 +42,18 @@ const Gameboard = () => { // Checks if client is currently moving player by session ID const nowMovingPlayer = data.players.find(player => player.nowMoving === true); if (nowMovingPlayer) { - if (nowMovingPlayer._id === context.playerId) { + if (nowMovingPlayer._id === player.playerId) { setNowMoving(true); } else { - setRolledNumber(null); setNowMoving(false); } setMovingPlayer(nowMovingPlayer.color); } - const currentPlayer = data.players.find(player => player._id === context.playerId); + const currentPlayer = data.players.find(player => player._id === player.playerId); + checkWin(); setIsReady(currentPlayer.ready); + setRolledNumber(data.rolledNumber); setPlayers(data.players); setPawns(data.pawns); setTime(data.nextMoveTime);