Hinzuügen der Game Logik Teilweise
This commit is contained in:
@@ -1,12 +1,15 @@
|
|||||||
const socketIO = require("socket.io");
|
const socketIO = require("socket.io");
|
||||||
const SocketUser = require("../Classes/SocketUser");
|
const SocketUser = require("../Classes/SocketUser");
|
||||||
const LobbyManager = require("../LobbyManager/LobbyManager");
|
const LobbyManager = require("../LobbyManager/LobbyManager");
|
||||||
|
const GameManager = require("./GameManager");
|
||||||
|
|
||||||
class ClientHandler {
|
class ClientHandler {
|
||||||
/** @param {socketIO.Socket} socket @param {LobbyManager} lobbyManager */
|
/** @param {socketIO.Socket} socket @param {GameManager} gameManager */
|
||||||
constructor(socket, lobbyManager) {
|
constructor(socket, gameManager) {
|
||||||
this.socket = socket;
|
this.socket = socket;
|
||||||
this.lobbyManager = lobbyManager;
|
this.gameManager = gameManager;
|
||||||
|
|
||||||
|
this.currentGameCode = null;
|
||||||
|
|
||||||
this.user = new SocketUser(
|
this.user = new SocketUser(
|
||||||
this.socket.request.session.user.id,
|
this.socket.request.session.user.id,
|
||||||
@@ -16,17 +19,11 @@ class ClientHandler {
|
|||||||
|
|
||||||
this.socket.on("disconnect", () => { this.defaultDisconnect() });
|
this.socket.on("disconnect", () => { this.defaultDisconnect() });
|
||||||
|
|
||||||
this.checkForLobby();
|
this.joinGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
checkForLobby(){
|
joinGame(){
|
||||||
const isUserInLobby = this.lobbyManager.oldLobbys.some((lobby) =>
|
const response = this.gameManager.joinGame(this.user);
|
||||||
lobby.users.some((user) => user.id === this.user.id)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!isUserInLobby) {
|
|
||||||
this.socket.disconnect();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultDisconnect(){
|
defaultDisconnect(){
|
||||||
|
|||||||
12
backend/src/SocketIO/GameManager/Game/Game.js
Normal file
12
backend/src/SocketIO/GameManager/Game/Game.js
Normal 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;
|
||||||
44
backend/src/SocketIO/GameManager/GameManager.js
Normal file
44
backend/src/SocketIO/GameManager/GameManager.js
Normal 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;
|
||||||
@@ -5,6 +5,7 @@ const ExpressManager = require("../Express/ExpressManager");
|
|||||||
const LobbyManager = require("./LobbyManager/LobbyManager");
|
const LobbyManager = require("./LobbyManager/LobbyManager");
|
||||||
const ClientHandlerLobby = require("./LobbyManager/ClientHandler");
|
const ClientHandlerLobby = require("./LobbyManager/ClientHandler");
|
||||||
const ClientHandlerGame = require("./GameManager/ClientHandler");
|
const ClientHandlerGame = require("./GameManager/ClientHandler");
|
||||||
|
const GameManager = require("./GameManager/GameManager");
|
||||||
require("dotenv").config();
|
require("dotenv").config();
|
||||||
|
|
||||||
class SocketIOManager {
|
class SocketIOManager {
|
||||||
@@ -30,6 +31,7 @@ class SocketIOManager {
|
|||||||
Der LobbyManager kümmert sich um alle Lobbys
|
Der LobbyManager kümmert sich um alle Lobbys
|
||||||
*/
|
*/
|
||||||
this.lobbyManager = new LobbyManager(this.io);
|
this.lobbyManager = new LobbyManager(this.io);
|
||||||
|
this.gameManager = new GameManager(this.io, this.lobbyManager);
|
||||||
|
|
||||||
this.io.on("connection", (socket) => { this.sendToRightManager(socket) });
|
this.io.on("connection", (socket) => { this.sendToRightManager(socket) });
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user