added ready button

This commit is contained in:
Wenszel 2021-03-19 22:19:09 +01:00
parent 78eb161408
commit 0c5181ea62
10 changed files with 97 additions and 16 deletions

View File

@ -1,5 +1,31 @@
var express = require('express'); var express = require('express');
var router = express.Router(); var router = express.Router();
var RoomModel = require('../schemas/room');
router.post('/ready', function (req, res){
RoomModel.findOne({_id: req.session.roomId}, function (err, doc){
if (err) {
res.status(500).send(err)
} else {
let updatedPlayers = doc.players;
let index = updatedPlayers.findIndex( player => player.name === req.session.name);
updatedPlayers[index].ready = !updatedPlayers[index].ready;
RoomModel.findOneAndUpdate({
_id: req.session.roomId
}, {players: updatedPlayers}, function(err, doc){
if (err){
console.log(err)
}
else{
console.log("Updated Docs : ", doc);
}
});
res.status(200).send("Ready!");
}
});
});
//adding users to exisiting room or creating new room if full //adding users to exisiting room or creating new room if full
router.post('/add', function (req, res) { router.post('/add', function (req, res) {

View File

@ -18,15 +18,15 @@ router.post('/add', function (req, res) {
full: false, full: false,
started: false, started: false,
players: [{ players: [{
player: req.body.name, name: req.body.name,
ready: false,
color: colors[0] color: colors[0]
}], }],
}); });
newRoom.save() newRoom.save()
.then(function(){ .then(function(){
req.session.roomId = newRoom._id; req.session.roomId = newRoom._id;
req.session.player = req.body.name; req.session.name = req.body.name;
res.status(200).send('Joined!'); res.status(200).send('Joined!');
}) })
.catch(err => res.status(400).json('Error: ' + err)) .catch(err => res.status(400).json('Error: ' + err))
@ -35,7 +35,8 @@ router.post('/add', function (req, res) {
let players = results.players; let players = results.players;
players.push( players.push(
{ {
player: req.body.name, name: req.body.name,
ready: false,
color: colors[players.length] color: colors[players.length]
} }
@ -57,7 +58,7 @@ router.post('/add', function (req, res) {
} }
).then(()=>{ ).then(()=>{
req.session.roomId = results._id; req.session.roomId = results._id;
req.session.player = req.body.name; req.session.name = req.body.name;
res.status(200).send('Joined!'); res.status(200).send('Joined!');
}); });

View File

@ -7,8 +7,9 @@ var RoomSchema = new Schema({
started: Boolean, started: Boolean,
full: Boolean, full: Boolean,
players: [{ players: [{
player: String, name: String,
color: String, color: String,
ready: Boolean,
}], }],
positions: Map positions: Map
}); });

View File

@ -37,7 +37,7 @@ mongoose.connect(CONNECTION_URI, {
var MongoDBStore = require('connect-mongodb-session')(session); var MongoDBStore = require('connect-mongodb-session')(session);
var store = new MongoDBStore({ var store = new MongoDBStore({
uri: CONNECTION_URI, uri: CONNECTION_URI,
collection: 'mySessions' collection: 'sessions'
}); });
app.use(session({ app.use(session({
secret: 'lalala', secret: 'lalala',
@ -56,9 +56,11 @@ const playerRoutes = require("./routes/player");
app.get('/', (req,res)=>{ app.get('/', (req,res)=>{
if(req.session.player){ if(req.session.player){
res.send({ res.send({
player: req.session.player, name: req.session.name,
roomId: req.session.roomId, roomId: req.session.roomId,
}) })
}else{
res.end();
} }
}) })

View File

View File

@ -0,0 +1,7 @@
.navbar-container{
display: flex;
flex-direction: row;
}
.navbar-container>div{
margin-right: 10px;
}

View File

@ -1,25 +1,28 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import NameContainer from './navbar-components/NameContainer'
import ReadyButton from './navbar-components/ReadyButton'
import './Navbar.css';
import axios from 'axios'; import axios from 'axios';
const Navbar = () => { const Navbar = () => {
const [players, setPlayers] = useState([]); const [players, setPlayers] = useState([]);
useEffect(()=>{ useEffect(()=>{
//fetching names, time and other data //fetching players data
axios.get('http://localhost:3001/room/',{ axios.get('http://localhost:3001/room/',{
withCredentials:true, withCredentials:true,
mode: 'cors', mode: 'cors',
}).then((response)=>{ }).then((response)=>{
setPlayers(response.data.players); setPlayers(response.data.players);
console.log(response.data.players);
}) })
} },[]);
,[]);
return( return(
<div> <div className="navbar-container">
{players.map((name)=> {players.map((player)=>
<p key={name.player}>{name.player}</p> <NameContainer key={player.name} player = {player}/>
)} )}
<ReadyButton/>
</div> </div>
); );
} }

View File

@ -0,0 +1,10 @@
.name-container{
width: 100px;
height: 50px;
border-radius: 5px;
color: white;
font-weight: bold;
display: flex;
justify-content: center;
align-items: center;
}

View File

@ -0,0 +1,13 @@
import React from 'react';
import './NameContainer.css'
const NameContainer = ( {player} ) => {
return (
<div className="name-container" style={{backgroundColor: player.color}}>
{player.name}
</div>
)
}
export default NameContainer;

View File

@ -0,0 +1,18 @@
import React from 'react';
import axios from 'axios';
const ReadyButton = () => {
const handleCheckboxChange = () => {
axios.post('http://localhost:3000/player/ready',{},{withCredentials: true});
}
return(
<>
<label>Ready: </label>
<input type="checkbox" onClick={handleCheckboxChange}/>
</>
)
}
export default ReadyButton;