From f318afe071fd9cea4ec980aca8dd0ec44803dc45 Mon Sep 17 00:00:00 2001 From: Wenszel Date: Tue, 28 Nov 2023 18:51:50 +0100 Subject: [PATCH] added joining to room --- backend/controllers/roomController.js | 5 +- backend/handlers/playerHandler.js | 21 ++-- backend/handlers/roomHandler.js | 30 +++--- backend/models/room.js | 2 +- .../LoginPage/AddServer/AddServer.css | 35 +++++++ .../LoginPage/AddServer/AddServer.jsx | 58 +++++++++++ src/components/LoginPage/LoginPage.css | 97 +++++++----------- src/components/LoginPage/LoginPage.jsx | 56 ++-------- .../LoginPage/NameInput/NameInput.css | 35 +++++-- .../LoginPage/NameInput/NameInput.jsx | 45 ++++++-- .../LoginPage/ServerList/ServerList.css | 51 +++++++++ .../LoginPage/ServerList/ServerList.jsx | 79 ++++++++++++++ .../navbar-components/AnimatedOverlay.jsx | 2 +- src/images/login-page/lock.png | Bin 0 -> 10430 bytes src/images/login-page/refresh.png | Bin 0 -> 22493 bytes src/images/login-page/user.png | Bin 16826 -> 9069 bytes 16 files changed, 356 insertions(+), 160 deletions(-) create mode 100644 src/components/LoginPage/AddServer/AddServer.css create mode 100644 src/components/LoginPage/AddServer/AddServer.jsx create mode 100644 src/components/LoginPage/ServerList/ServerList.css create mode 100644 src/components/LoginPage/ServerList/ServerList.jsx create mode 100644 src/images/login-page/lock.png create mode 100644 src/images/login-page/refresh.png diff --git a/backend/controllers/roomController.js b/backend/controllers/roomController.js index f698a3e..80a36ac 100644 --- a/backend/controllers/roomController.js +++ b/backend/controllers/roomController.js @@ -17,8 +17,9 @@ const getJoinableRoom = async () => { return await Room.findOne({ full: false, started: false }).exec(); }; -const createNewRoom = () => { - const room = new Room(); +const createNewRoom = data => { + const room = new Room(data); + room.save(); return room; }; diff --git a/backend/handlers/playerHandler.js b/backend/handlers/playerHandler.js index 2918d92..825d568 100644 --- a/backend/handlers/playerHandler.js +++ b/backend/handlers/playerHandler.js @@ -1,17 +1,15 @@ -const { getRoom, updateRoom, getJoinableRoom, createNewRoom, findPlayer } = require('../controllers/roomController'); +const { getRoom, updateRoom } = require('../controllers/roomController'); const { colors } = require('../utils/constants'); module.exports = socket => { const req = socket.request; const handleLogin = async data => { - if (await findPlayer(req.sessionID)) return; - const room = await getJoinableRoom(); - if (room) { - addPlayerToExistingRoom(room, data); - } else { - addNewRoom(data); - } + const room = await getRoom(data.roomId); + if (room.isFull()) return socket.emit('error:changeRoom'); + if (room.started) return socket.emit('error:changeRoom'); + if (room.private && room.password !== data.password) return socket.emit('error:wrongPassword'); + addPlayerToExistingRoom(room, data); }; const handleReady = async () => { @@ -23,13 +21,6 @@ module.exports = socket => { await updateRoom(room); }; - const addNewRoom = async data => { - const room = createNewRoom(); - room.addPlayer(data.name, req.sessionID); - await room.save(); - reloadSession(room); - }; - const addPlayerToExistingRoom = async (room, data) => { room.addPlayer(data.name); if (room.isFull()) { diff --git a/backend/handlers/roomHandler.js b/backend/handlers/roomHandler.js index fbde0d6..bee90de 100644 --- a/backend/handlers/roomHandler.js +++ b/backend/handlers/roomHandler.js @@ -1,10 +1,10 @@ -const { getRooms, getRoom, updateRoom } = require('../controllers/roomController'); +const { getRooms, getRoom, updateRoom, createNewRoom } = require('../controllers/roomController'); const { sendToOnePlayerRooms, sendToOnePlayerData, sendToPlayersData } = require('../socket/emits'); module.exports = socket => { const req = socket.request; - const getData = async () => { + const handleGetData = async () => { const room = await getRoom(req.session.roomId); // Handle the situation when the server crashes and any player reconnects after the time has expired // Typically, the responsibility for changing players is managed by gameHandler.js. @@ -15,23 +15,17 @@ module.exports = socket => { sendToOnePlayerData(socket.id, room); }; - const getAllRooms = async () => { + const handleGetAllRooms = async () => { let rooms = await getRooms(); - const response = []; - rooms.forEach(room => { - if (!room.isStarted && !room.isFull()) { - response.push({ - _id: room._id, - private: room.private, - name: room.name, - players: room.players, - isStarted: room.isStarted, - }); - } - }); - sendToOnePlayerRooms(socket.id, response); + sendToOnePlayerRooms(socket.id, rooms); }; - socket.on('room:data', getData); - socket.on('room:rooms', getAllRooms); + const handleCreateRoom = async data => { + createNewRoom(data); + socket.to(socket.id).emit('room:created'); + }; + + socket.on('room:data', handleGetData); + socket.on('room:rooms', handleGetAllRooms); + socket.on('room:create', handleCreateRoom); }; diff --git a/backend/models/room.js b/backend/models/room.js index c1672d4..2c7ca34 100644 --- a/backend/models/room.js +++ b/backend/models/room.js @@ -7,7 +7,7 @@ const PlayerSchema = require('./player'); const RoomSchema = new mongoose.Schema({ name: String, - private: { type: Boolean, default: true }, + private: { type: Boolean, default: false }, password: String, createDate: { type: Date, default: Date.now }, started: { type: Boolean, default: false }, diff --git a/src/components/LoginPage/AddServer/AddServer.css b/src/components/LoginPage/AddServer/AddServer.css new file mode 100644 index 0000000..4c64921 --- /dev/null +++ b/src/components/LoginPage/AddServer/AddServer.css @@ -0,0 +1,35 @@ +.refresh { + display: flex; + margin-left: auto; + justify-content: center; + align-items: center; + width: 40px; + height: 100%; + border: 1px solid white; +} +.refresh > img { + width: 20px; + height: 20px; + cursor: pointer; +} + +form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; +} + +.private-container { + margin-left: 10px; + display: flex; + flex-direction: row; + align-items: center; + width: 100%; +} +input:disabled { + background-color: black; + color: #999; + border: 1px solid #ddd; +} diff --git a/src/components/LoginPage/AddServer/AddServer.jsx b/src/components/LoginPage/AddServer/AddServer.jsx new file mode 100644 index 0000000..054bf54 --- /dev/null +++ b/src/components/LoginPage/AddServer/AddServer.jsx @@ -0,0 +1,58 @@ +import React, { useState, useContext, useEffect } from 'react'; +import './AddServer.css'; +import Switch from '@material-ui/core/Switch'; +import { SocketContext } from '../../../App'; +const AddServer = () => { + const socket = useContext(SocketContext); + const [isPrivate, setIsPrivate] = useState(false); + const [serverName, setServerName] = useState(''); + const [password, setPassword] = useState(''); + + useEffect(() => { + socket.on('room:created', () => { + console.log('ewa'); + socket.emit('room:rooms'); + }); + }, []); + + const handleButtonClick = e => { + e.preventDefault(); + socket.emit('room:create', { + name: serverName, + private: isPrivate, + password: password, + }); + }; + + return ( +
+
+

Host A Server

+
+
+
+ setServerName(e.target.value)} + placeholder='Server Name' + /> +
+

Private

+ setIsPrivate(!isPrivate)} /> +
+ setPassword(e.target.value)} + placeholder='password' + disabled={!isPrivate} + /> + +
+
+
+ ); +}; + +export default AddServer; diff --git a/src/components/LoginPage/LoginPage.css b/src/components/LoginPage/LoginPage.css index 62099aa..3376c6f 100644 --- a/src/components/LoginPage/LoginPage.css +++ b/src/components/LoginPage/LoginPage.css @@ -1,76 +1,53 @@ .login-page-container { + display: flex; + flex-direction: row; + + justify-content: center; + align-items: flex-start; + height: 50%; + width: 100%; +} + +.lp-container { + margin: 50px; display: flex; flex-direction: column; align-items: center; justify-content: center; - height: 50vh; - width: 400px; - position: relative; + width: 500px; padding: 20px; - border-radius: 5%; - border: 5px solid white; - background-color: rgba(0, 0, 0, 0.5); -} -h1 { - margin-right: 10px; - align-self: flex-start; - top: 0; - position: absolute; color: white; } -.rooms { - width: 98%; - height: 80%; - overflow-y: scroll; - overflow-x: hidden; -} -.room { - cursor: pointer; - justify-content: space-between; + +.title-container { display: flex; flex-direction: row; + justify-content: center; align-items: center; - color: white; - width: 90%; - margin: 10px; - padding: 10px; - border: 1px solid black; -} -.room-selected { + width: 100%; + height: 40px; border: 1px solid white; + border-radius: 2px; + transform: scaleX(1.02); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); + padding-left: 10px; + text-align: center; } -.room-selected, -.room:hover { - background-color: rgba(0, 0, 0, 0.5); + +.title-container > h1 { + width: 100%; + margin: 0; + padding: 0; } -.number-of-players { + +.content-container { display: flex; - flex-direction: row; - align-items: center; -} -.number-of-players > img { - margin-right: 5px; - width: 20px; - height: 20px; -} - -/* Firefox */ -* { - scrollbar-width: auto; - scrollbar-color: #ffffff rgba(0, 0, 0, 0.1); -} - -/* Chrome, Edge, and Safari */ -*::-webkit-scrollbar { - width: 8px; -} - -*::-webkit-scrollbar-track { - background: rgba(0, 0, 0, 0); -} - -*::-webkit-scrollbar-thumb { - background-color: #ffffff; - border-radius: 10px; - border: 3px none #ffffff; + flex-direction: column; + width: 100%; + padding: 10px; + background-color: rgba(0, 0, 0, 0.5); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); + border-left: 1px solid black; + border-right: 1px solid black; + border-bottom: 1px solid black; } diff --git a/src/components/LoginPage/LoginPage.jsx b/src/components/LoginPage/LoginPage.jsx index 835787d..9532e2d 100644 --- a/src/components/LoginPage/LoginPage.jsx +++ b/src/components/LoginPage/LoginPage.jsx @@ -1,54 +1,16 @@ -import React, { useContext, useEffect, useState } from 'react'; -import NameInput from './NameInput/NameInput'; -import { SocketContext } from '../../App'; import './LoginPage.css'; -import userImage from '../../images/login-page/user.png'; +import AddServer from './AddServer/AddServer'; +import ServerList from './ServerList/ServerList'; +import NameInput from './NameInput/NameInput'; const LoginPage = () => { - const socket = useContext(SocketContext); - const [rooms, setRooms] = useState([]); - const [selectedRoom, setSelectedRoom] = useState(null); - - useEffect(async () => { - socket.emit('room:rooms'); - socket.on('room:rooms', data => { - data = JSON.parse(data); - console.log(data); - setRooms(data); - }); - }, []); - return ( -
-

Select room:

-
- {rooms.map(room => { - return ( -
{ - if (selectedRoom && selectedRoom == room._id) { - setSelectedRoom(null); - } else { - setSelectedRoom(room._id); - } - }} - key={room.id} - > -
-

{room.name}

- {room.players.map(player => player.name + ' ')} -
- -
- - {room.players.length}/4 -
-
- ); - })} + <> +
+ +
- -
+ ); }; + export default LoginPage; diff --git a/src/components/LoginPage/NameInput/NameInput.css b/src/components/LoginPage/NameInput/NameInput.css index f7509fe..9f6282c 100644 --- a/src/components/LoginPage/NameInput/NameInput.css +++ b/src/components/LoginPage/NameInput/NameInput.css @@ -1,11 +1,34 @@ .name-input-container { display: flex; - position: absolute; - bottom: 0; - flex-direction: row; - width: 80%; + flex-direction: column; + padding: 10px 20px 60px 20px; + width: 300px; + background: radial-gradient(circle, rgba(0, 138, 255, 1) 5%, rgba(9, 9, 121, 1) 81%); + border: 1px solid white; + border-radius: 8px; margin: 20px; } +.name-input-container > button { + margin-top: 5px; + text-align: center; + width: 100px; + align-self: center; +} +.name-input-container > input { + margin-top: 10px; +} +.name-overlay { + position: absolute; + display: flex; + align-items: center; + justify-content: center; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 1; +} input, button { padding: 0; @@ -21,7 +44,7 @@ input { border-radius: 8px; color: white; border: 1px solid #ccc; - background-color: rgba(0, 0, 0, 0.5); + background-color: rgba(0, 0, 0, 0.2); transition: border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; } @@ -37,7 +60,7 @@ button { border-radius: 8px; border: none; color: #fff; - background-color: rgba(0, 0, 0, 0.5); + background-color: rgba(0, 0, 0, 0.4); cursor: pointer; transition: background-color 0.3s ease-in-out; } diff --git a/src/components/LoginPage/NameInput/NameInput.jsx b/src/components/LoginPage/NameInput/NameInput.jsx index 491c56b..e1212e4 100644 --- a/src/components/LoginPage/NameInput/NameInput.jsx +++ b/src/components/LoginPage/NameInput/NameInput.jsx @@ -1,19 +1,44 @@ -import React, { useState, useContext } from 'react'; +import React, { useState, useContext, useEffect } from 'react'; import { SocketContext } from '../../../App'; import './NameInput.css'; -const NameInput = () => { +const NameInput = ({ isRoomPrivate, roomId }) => { const socket = useContext(SocketContext); - const [inputValue, setInputValue] = useState(''); - const handleInputChange = e => { - setInputValue(e.target.value); - }; + const [nickname, setNickname] = useState(''); + const [password, setPassword] = useState(''); + const [isPasswordWrong, setIsPasswordWrong] = useState(false); const handleButtonClick = () => { - socket.emit('player:login', { name: inputValue }); + socket.emit('player:login', { name: nickname, password: password, roomId: roomId }); }; + useEffect(() => { + socket.on('error:wrongPassword', () => { + setIsPasswordWrong(true); + }); + const keyDownHandler = event => { + if (event.key === 'Enter') { + event.preventDefault(); + handleButtonClick(); + } + }; + document.addEventListener('keydown', keyDownHandler); + return () => { + document.removeEventListener('keydown', keyDownHandler); + }; + }, []); + return ( -
- - +
+
+ setNickname(e.target.value)} /> + {isRoomPrivate ? ( + setPassword(e.target.value)} + style={{ backgroundColor: isPasswordWrong ? 'red' : null }} + /> + ) : null} + +
); }; diff --git a/src/components/LoginPage/ServerList/ServerList.css b/src/components/LoginPage/ServerList/ServerList.css new file mode 100644 index 0000000..318a008 --- /dev/null +++ b/src/components/LoginPage/ServerList/ServerList.css @@ -0,0 +1,51 @@ +th { + text-align: left; +} +img { + margin-right: 5px; + width: 20px; + height: 20px; +} +th, +td { + padding: 8px; + text-align: left; + height: 50px; +} +tr { + max-height: 50px; +} + +table { + border-collapse: collapse; + width: 100%; +} +.server-container { + display: flex; + height: 500px; + overflow: scroll; +} +.room-name { + max-width: 150px; + overflow: hidden; +} +/* Firefox */ +* { + scrollbar-width: auto; + scrollbar-color: #ffffff rgba(0, 0, 0, 0.1); +} + +/* Chrome, Edge, and Safari */ +*::-webkit-scrollbar { + background: rgba(0, 0, 0, 0); + width: 10px; +} + +*::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0); +} + +*::-webkit-scrollbar-thumb { + background-color: #ffffff; + border-radius: 10px; +} diff --git a/src/components/LoginPage/ServerList/ServerList.jsx b/src/components/LoginPage/ServerList/ServerList.jsx new file mode 100644 index 0000000..28e55a2 --- /dev/null +++ b/src/components/LoginPage/ServerList/ServerList.jsx @@ -0,0 +1,79 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { SocketContext } from '../../../App'; +import lock from '../../../images/login-page/lock.png'; +import refresh from '../../../images/login-page/refresh.png'; +import ReactLoading from 'react-loading'; + +import './ServerList.css'; +import NameInput from '../NameInput/NameInput'; + +const ServerList = () => { + const socket = useContext(SocketContext); + const [rooms, setRooms] = useState([]); + const [joining, setJoining] = useState(false); + const [clickedRoom, setClickedRoom] = useState(null); + useEffect(async () => { + socket.emit('room:rooms'); + socket.on('room:rooms', data => { + data = JSON.parse(data); + setRooms(data); + }); + }, []); + + const getRooms = () => { + setRooms(null); + socket.emit('room:rooms'); + }; + + const handleJoinClick = room => { + setClickedRoom(room); + setJoining(true); + }; + + return ( +
+
+

Server List

+
+ +
+
+
+ {rooms ? ( + + + + + + + + + + + + {rooms.map((room, index) => ( + + + + + + + + ))} + +
Server#/#Status
{room.private ? : null}{room.name}{`${room.players.length}/4`}{room.isStarted ? 'started' : 'waiting'} + +
+ ) : ( +
+ +
+ )} +
+ {joining ? ( + + ) : null} +
+ ); +}; +export default ServerList; diff --git a/src/components/navbar-components/AnimatedOverlay.jsx b/src/components/navbar-components/AnimatedOverlay.jsx index 82b1507..5fc82fa 100644 --- a/src/components/navbar-components/AnimatedOverlay.jsx +++ b/src/components/navbar-components/AnimatedOverlay.jsx @@ -14,7 +14,7 @@ const AnimatedOverlay = ({ time }) => { in={true} timeout={0} classNames='overlay' - style={{ 'animation-delay': `-${animationDelay}s` }} + style={{ animationDelay: `-${animationDelay}s` }} unmountOnExit >
diff --git a/src/images/login-page/lock.png b/src/images/login-page/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..8e56993856be6937ed7b3f36deab245f5f3fb5a9 GIT binary patch literal 10430 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 literal 0 HcmV?d00001 diff --git a/src/images/login-page/refresh.png b/src/images/login-page/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..25988e66a8ec795caa9d1f39f416c82083dd6e3c GIT binary patch literal 22493 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

IA?)MjP!%=gz=kK*5%-P zGP#1@`MIw2dKAE5{sQ*`Gu3Z^?saPH8Fz3u#F+xH^>W%~&nrF9(1iL9XzmhsJDC9P zp{aQx$p?`!_jzcoe|$vO@42Z#5JLre*3zyT-vmqG15848sc~L0DpmdeC=uH+8T)}uOL7~j&bD)?_NzY>ynF-H zCm*my$vl|aY+dxpYU>{L)J*tGJ#Di?mA+_DJ7JE;R0Q3ooaS|%7?r0&_N#HC8Ap>@ z$%r#{BLKs7&PROx-b3D=_yADuPOjS?4J1IlfGb%Unaf$MHig3Hpi=9$M-b`t{Bvji zOOLUgkU_BH+s&>obnYFtp_bli6!{!AUR7<9pX_CROyI@!HGo>&`uOd&+80@Y6V zpFXW)mAd{#tW??Vv0igEj=-JD>#SKs3~HE}TWC0LlU(vGvbf3|;*hf>Uu?V5seFy2 zFm4$msHsbwSaE!i*+-Z0!9+o;hnkH&ECVFnzKo#yjz^S&RF1|HMt(xx8kZAEkEBUL z`nTzkpzoX6mdKK&T~k2C2)Q3|w@vcX*Vi`F-)V$`q`n6;$1Sow<>pMeSGkq+7wTHc znIeodOh~D-He$!PTvm#;af5J$;Zh5H6fh+TiEC~DM^?kmxA~a(3nk(sxp7qv;*@ep z-JURPIiXy&pzG97z`nUG($I=V)^RWBTcMb`(+^Wrqo6TR=oKne`j?ea*Ux9Ybt0>1 zNQ#(**2~R(3nrP+q|}4b9cUhbd#0muARa7@M%H+x;MPRi4D`^NyUCFV{rgVoXEHMT z2CuzZOK~^+U41Q8{DD@=&HWqLu#f1N)|OC3T-O}}uNI6R%h>>M8dWupYUKW~Yewgp z;;gb73`K=FO5(b~p!x|m>+Oqpw#3yxq5(+*Oj)dWtfV_{L=w23x_-@VO##FqMB*dU zhHAw^v|d_nV{7Y8b@A0b02l{ukXi_Z3Bus06wurk<`%d|O)au#g!bIDp{nnAR)ZSk zx(ojUdVg0+wwt9cy2RND{%+}Mzovj2Udx77e5ogFfzCp`FuZ)X3Y#&Oo#u^MKyE~{+@@Gbum$pmD) zorE|Dk!D_?L5HOsw94c*EBlS{^W*g1gih#uIv}0>d4|=>_MLcL{|m&!(hMUlZSF_- zY*PRTiM~dIZu~hO$iU*tft`s!R`p5R$y#3(&9x z?wkS?L9$FKZVFSg!;z?!l<6d{gUx}WK6WhpNGH(v82j!i2~G)m1DsE*(%W1(lqPA? z@V3bb%^=V&Ge}5hms%1)2vK{?pCbzGpO_ObIRxg#f<~^1OzAsL8{7leyi90qm75YR zJ`VETEb(`FW9WiM;KtGvZfd(Xg3Zi+-^!L2M4Yk3O>4;#X8?L42q@428D&9lQlnQ> z*C~()%c0KLq1O+_9t22F^3o-WsNn}v%Fom;*%V%yk}60GxeYQKVY-QfDy zldElDnHw@~g6vj+r@0&ZH@HuIqvT0Y-9GfblXP!t?T?*@t0HvOzvjo+J%WBfp^H