diff --git a/Makefile b/Makefile index ba00eaec..fed7dc65 100644 --- a/Makefile +++ b/Makefile @@ -24,8 +24,7 @@ start_dev: start_prod: docker compose -f ${DOCKERCOMPOSEPATH} start prod -restart:stop - @make up +re: down dev down: docker compose -f ${DOCKERCOMPOSEPATH} -v down diff --git a/memo.txt b/memo.txt index b9730741..fb6b762c 100644 --- a/memo.txt +++ b/memo.txt @@ -2,13 +2,14 @@ DONE : TODO : - routes gameServer -> Nest : - - validation - - creation de partie - - fin de partie + - refactoring, + Write independent init script like old pong.ts, + to limit the numbers of imports and clutter in svelte script. + - If in game, destroy game scripts stuff when changing page. + (I need to dig deeper in svelte to know how this could work) - mode spectateur - - quelques routes cote serveur - - une interface cote front (liste des matchs en cours) + - quelques routes cote serveur + - une interface cote front (liste des matchs en cours) - etat du client (en ligne, en jeu, ...) - le chat @@ -20,6 +21,9 @@ TODO : BUG : - Bug de son étonnant dans le front, ça pop une fois de temps en temps : Uncaught (in promise) DOMException: The element has no supported sources. + 18.ogg et 24.ogg bug peut-etre. + - l'avatar ne se charge pas après avoir redémarré les containers (mais sans avoir supprimé les volumes) + normal ou oubli ? -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- - Comment fonctionne .env ? Comment faire pour ne pas le push sur le depot ? diff --git a/srcs/requirements/game_server/game_back/src/server/class/GameSession.ts b/srcs/requirements/game_server/game_back/src/server/class/GameSession.ts index 896dfacb..caedea3f 100644 --- a/srcs/requirements/game_server/game_back/src/server/class/GameSession.ts +++ b/srcs/requirements/game_server/game_back/src/server/class/GameSession.ts @@ -4,7 +4,7 @@ import * as ev from "../../shared_js/class/Event.js" import * as c from "../constants.js" import { ClientPlayer, ClientSpectator } from "./Client"; import { GameComponentsServer } from "./GameComponentsServer.js"; -import { clientInputListener } from "../wsServer.js"; +import { clientInputListener, clientTerminate } from "../wsServer.js"; import { random } from "../utils.js"; import { Ball } from "../../shared_js/class/Rectangle.js"; import { wallsMovements } from "../../shared_js/wallsMovement.js"; @@ -246,6 +246,16 @@ export class GameSession { }) }); + const gameSession = this; + setTimeout(function kickRemainingClients() { + gameSession.spectatorsMap.forEach((client) => { + clientTerminate(client); + }); + gameSession.playersMap.forEach((client) => { + clientTerminate(client); + }); + }, 15000); + // logs if (winner === en.PlayerSide.left) { console.log("Player Left WIN"); diff --git a/srcs/requirements/game_server/game_back/src/server/wsServer.ts b/srcs/requirements/game_server/game_back/src/server/wsServer.ts index 509450b3..e4e86197 100644 --- a/srcs/requirements/game_server/game_back/src/server/wsServer.ts +++ b/srcs/requirements/game_server/game_back/src/server/wsServer.ts @@ -202,19 +202,21 @@ function createGameSession(playersArr: ClientPlayer[], matchOptions: en.MatchOpt client.gameSession = gameSession; gameSession.playersMap.set(client.id, client); gameSession.unreadyPlayersMap.set(client.id, client); - }); - - // WIP: Not pretty, hardcoded two players. - // Could be done in gameSession maybe ? - playersArr[0].racket = gameSession.components.playerRight; - playersArr[1].racket = gameSession.components.playerLeft; - - playersArr.forEach((client) => { client.socket.once("message", playerReadyConfirmationListener); }); - playersArr[0].socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.right) )); - playersArr[1].socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.left) )); + // REFACTORING: Not pretty, hardcoded two players. + // Could be done in gameSession maybe ? + const gameSessionPlayersIterator = gameSession.playersMap.values(); + let player: ClientPlayer; + player = (gameSessionPlayersIterator.next().value); + player.racket = gameSession.components.playerLeft; + player.socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.left) )); + + player = (gameSessionPlayersIterator.next().value); + player.racket = gameSession.components.playerRight; + player.socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.right) )); + // REFACTORING setTimeout(function abortMatch() { if (gameSession.unreadyPlayersMap.size !== 0) @@ -335,7 +337,7 @@ const pingInterval = setInterval( () => { }, 4200); -function clientTerminate(client: Client) +export function clientTerminate(client: Client) { client.socket.terminate(); if (client.gameSession) diff --git a/srcs/requirements/game_server/game_back/src/shared_js/constants.ts b/srcs/requirements/game_server/game_back/src/shared_js/constants.ts index be86ba7b..44c282c2 100644 --- a/srcs/requirements/game_server/game_back/src/shared_js/constants.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/constants.ts @@ -11,8 +11,8 @@ export const pw = Math.floor(w*0.017); export const ph = pw*6; export const ballSize = pw; export const wallSize = Math.floor(w*0.01); -export const racketSpeed = Math.floor(w*0.66); // pixel per second -export const ballSpeed = Math.floor(w*0.66); // pixel per second +export const racketSpeed = Math.floor(w*0.60); // pixel per second +export const ballSpeed = Math.floor(w*0.55); // pixel per second export const ballSpeedIncrease = Math.floor(ballSpeed*0.05); // pixel per second export const normalizedSpeed = false; // for consistency in speed independent of direction diff --git a/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte b/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte index af6094c2..9807f136 100644 --- a/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte @@ -1,4 +1,5 @@ +
{#each arr as match} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte index b45a42ac..6f2b5248 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte @@ -1,9 +1,9 @@
+ +
- -
.
+ {#if showError === true}
@@ -215,106 +225,93 @@ -{#if optionsAreNotSet} - {#if showGameOption === true} -
-
initGame()}> -
- -
- game options -
- - -
-
- - -
-
-

sound :

- - - - -
-
- - -
- {#if isSomeoneIsIvited === true} - - {/if} -
- -
-
-
- -
-
- {/if} - - {#if showInvitations} -
-
- -
- Current invitation(s) - {#if isThereAnyInvitation} - {#each invitations as invitation } + {#if optionsAreNotSet} + {#if showGameOption === true} +
+
initGame()}> +
+ +
+ game options
- {invitation.playerOneUsername} has invited you to play a pong ! - - + +
- {/each} - {/if} - {#if isThereAnyInvitation === false} -

Currently, no one asked to play with you.

- - {/if} -
+
+ + +
+
+

sound :

+ + + + +
+
+ + +
+ {#if isSomeoneIsInvited === true} + + {/if} +
+ +
+
+
+ +
-
+ {/if} + + {#if showInvitations} +
+
+ +
+ Current invitation(s) + {#if isThereAnyInvitation} + {#each invitations as invitation } +
+ {invitation.playerOneUsername} has invited you to play a pong ! + + +
+ {/each} + {/if} + {#if isThereAnyInvitation === false} +

Currently, no one asked to play with you.

+ + {/if} +
+
+
+ {/if} {/if} -{/if} - - - -
-
- - - -