Hinzuügen der Game Logik Teilweise

This commit is contained in:
2025-04-01 12:50:28 +02:00
parent 8e91360532
commit f97ad8b2cf
5 changed files with 68 additions and 13 deletions

View File

@@ -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(){

View File

@@ -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;

View File

@@ -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<string, Game>}*/
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;

View File

@@ -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;

View File

@@ -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) });