From f97ad8b2cf110475e7161dd4a07a463c1766985c Mon Sep 17 00:00:00 2001 From: Jonas Date: Tue, 1 Apr 2025 12:50:28 +0200 Subject: [PATCH] =?UTF-8?q?Hinzu=C3=BCgen=20der=20Game=20Logik=20Teilweise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/SocketIO/GameManager/ClientHandler.js | 21 ++++----- backend/src/SocketIO/GameManager/Game/Game.js | 12 +++++ .../src/SocketIO/GameManager/GameManager.js | 44 +++++++++++++++++++ .../src/SocketIO/LobbyManager/LobbyManager.js | 2 +- backend/src/SocketIO/SocketIOManager.js | 2 + 5 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 backend/src/SocketIO/GameManager/Game/Game.js create mode 100644 backend/src/SocketIO/GameManager/GameManager.js diff --git a/backend/src/SocketIO/GameManager/ClientHandler.js b/backend/src/SocketIO/GameManager/ClientHandler.js index 327cc51..b6ab95f 100644 --- a/backend/src/SocketIO/GameManager/ClientHandler.js +++ b/backend/src/SocketIO/GameManager/ClientHandler.js @@ -1,12 +1,15 @@ const socketIO = require("socket.io"); const SocketUser = require("../Classes/SocketUser"); const LobbyManager = require("../LobbyManager/LobbyManager"); +const GameManager = require("./GameManager"); class ClientHandler { - /** @param {socketIO.Socket} socket @param {LobbyManager} lobbyManager */ - constructor(socket, lobbyManager) { + /** @param {socketIO.Socket} socket @param {GameManager} gameManager */ + constructor(socket, gameManager) { this.socket = socket; - this.lobbyManager = lobbyManager; + this.gameManager = gameManager; + + this.currentGameCode = null; this.user = new SocketUser( this.socket.request.session.user.id, @@ -16,17 +19,11 @@ class ClientHandler { this.socket.on("disconnect", () => { this.defaultDisconnect() }); - this.checkForLobby(); + this.joinGame(); } - checkForLobby(){ - const isUserInLobby = this.lobbyManager.oldLobbys.some((lobby) => - lobby.users.some((user) => user.id === this.user.id) - ); - - if (!isUserInLobby) { - this.socket.disconnect(); - } + joinGame(){ + const response = this.gameManager.joinGame(this.user); } defaultDisconnect(){ diff --git a/backend/src/SocketIO/GameManager/Game/Game.js b/backend/src/SocketIO/GameManager/Game/Game.js new file mode 100644 index 0000000..8f63516 --- /dev/null +++ b/backend/src/SocketIO/GameManager/Game/Game.js @@ -0,0 +1,12 @@ +const GameManager = require("../GameManager"); + +class Game{ + /** @param {socketIO.Server} io @param {GameManager} gameManager @param {number} code */ + constructor(io, gameManager, code) { + this.io = io; + this.gameManager = gameManager; + this.code = code; + } +} + +module.exports = Game; \ No newline at end of file diff --git a/backend/src/SocketIO/GameManager/GameManager.js b/backend/src/SocketIO/GameManager/GameManager.js new file mode 100644 index 0000000..eeaf464 --- /dev/null +++ b/backend/src/SocketIO/GameManager/GameManager.js @@ -0,0 +1,44 @@ +const SocketUser = require("../Classes/SocketUser"); +const LobbyManager = require("../LobbyManager/LobbyManager"); +const Game = require("./Game/Game"); + +class GameManager { + /** @param {socketIO.Server} io @param {LobbyManager} lobbyManager */ + constructor(io, lobbyManager) { + this.io = io; + this.lobbyManager = lobbyManager; + + /** @type {Map}*/ + this.games = new Map(); + } + + /** @param {SocketUser} user */ + joinGame(user){ + const wasInLobby = false; + const oldLobbySave = undefined; + this.lobbyManager.oldLobbys.forEach(oldLobby => { + oldLobby.users.forEach(lobbyUser => { + if(lobbyUser.id === user.id){ + wasInLobby = true; + oldLobbySave = oldLobby; + } + }); + }); + + if(!wasInLobby) user.socket.disconnect(); + + const code = this.generateNonExistingCode(); + const game = new Game(this.io, this, code); + this.games.set(code, game); + } + + generateNonExistingCode() { + let code; + do { + code = Math.random().toString(36).substring(2, 8).toUpperCase(); + } while (this.games.has(code)); + return code; + } +} + +module.exports = GameManager; \ No newline at end of file diff --git a/backend/src/SocketIO/LobbyManager/LobbyManager.js b/backend/src/SocketIO/LobbyManager/LobbyManager.js index ba74840..3cbd3ae 100644 --- a/backend/src/SocketIO/LobbyManager/LobbyManager.js +++ b/backend/src/SocketIO/LobbyManager/LobbyManager.js @@ -24,7 +24,7 @@ class LobbyManager { /** @param {SocketUser} user */ createLobby(user){ const code = this.generateNonExistingCode(); - const lobby = new Lobby(this.io, this ,code); + const lobby = new Lobby(this.io, this, code); lobby.addUser(user); this.lobbys.set(code, lobby); return code; diff --git a/backend/src/SocketIO/SocketIOManager.js b/backend/src/SocketIO/SocketIOManager.js index de1398a..f178eec 100644 --- a/backend/src/SocketIO/SocketIOManager.js +++ b/backend/src/SocketIO/SocketIOManager.js @@ -5,6 +5,7 @@ const ExpressManager = require("../Express/ExpressManager"); const LobbyManager = require("./LobbyManager/LobbyManager"); const ClientHandlerLobby = require("./LobbyManager/ClientHandler"); const ClientHandlerGame = require("./GameManager/ClientHandler"); +const GameManager = require("./GameManager/GameManager"); require("dotenv").config(); class SocketIOManager { @@ -30,6 +31,7 @@ class SocketIOManager { Der LobbyManager kümmert sich um alle Lobbys */ this.lobbyManager = new LobbyManager(this.io); + this.gameManager = new GameManager(this.io, this.lobbyManager); this.io.on("connection", (socket) => { this.sendToRightManager(socket) });