From 6985d2218fa721fcd8b651dacda2b38b998447a7 Mon Sep 17 00:00:00 2001 From: LuckyLaszlo Date: Tue, 6 Dec 2022 07:40:15 +0100 Subject: [PATCH] minor wsServer changes ("for...of" loop replace a "map.forEach" to make early break possible) --- memo.txt | 3 +++ src/server/wsServer.ts | 33 +++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/memo.txt b/memo.txt index 98951849..20d493f3 100644 --- a/memo.txt +++ b/memo.txt @@ -24,6 +24,9 @@ TODO: (éventuellement Math.round() ?) - un autre mode de jeu alternatif ? - changer les "localhost:8080" dans le code. +- sélection couleur des raquettes (your color/opponent color) dans le profil utilisateur. + Enregistrement dans la DB. + init des couleurs dans GameComponentsClient() basé sur les variables de l'utilsateur connecté. ----------- idées modes de jeu : - mode 2 raquettes (un joueur haut/gauche et bas/droite) diff --git a/src/server/wsServer.ts b/src/server/wsServer.ts index c94c9297..a82df62d 100644 --- a/src/server/wsServer.ts +++ b/src/server/wsServer.ts @@ -62,6 +62,9 @@ function clientAnnounceListener(this: WebSocket, data: string) { // TODO: reconnection with msg.clientId ? // TODO: spectator/player distinction with msg.role ? + // msg.role is probably not a good idea. + // something like a different route could be better + // "/pong" to play, "/ID_OF_A_GAMESESSION" to spectate const player = clientsMap.get(this.id) as ClientPlayer; player.matchOptions = msg.matchOptions; @@ -89,15 +92,16 @@ function matchmaking(player: ClientPlayer) matchmakingPlayersMap.set(player.id, player); const compatiblePlayers: ClientPlayer[] = []; - matchmakingPlayersMap.forEach((client) => { - if (compatiblePlayers.length === maxPlayersNumber) { - return; // how can we stop forEach entierly and not just this step ??? - } - if (client.matchOptions === matchOptions) { + for (const [id, client] of matchmakingPlayersMap) + { + if (client.matchOptions === matchOptions) + { compatiblePlayers.push(client); - // PLACE complete forEach stop here + if (compatiblePlayers.length === maxPlayersNumber) { + break; + } } - }); + } if (compatiblePlayers.length < minPlayersNumber) { return; @@ -118,8 +122,11 @@ function matchmaking(player: ClientPlayer) // Could be done in gameSession maybe ? compatiblePlayers[0].racket = gameSession.components.playerRight; compatiblePlayers[1].racket = gameSession.components.playerLeft; - compatiblePlayers[0].socket.once("message", playerReadyConfirmationListener); - compatiblePlayers[1].socket.once("message", playerReadyConfirmationListener); + + compatiblePlayers.forEach((client) => { + client.socket.once("message", playerReadyConfirmationListener); + }); + compatiblePlayers[0].socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.right) )); compatiblePlayers[1].socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.left) )); } @@ -183,8 +190,10 @@ const pingInterval = setInterval( () => { clientTerminate(client, key, map); deleteLog += ` ${shortId(key)} |`; } - client.isAlive = false; - client.socket.ping(); + else { + client.isAlive = false; + client.socket.ping(); + } }); if (deleteLog) { @@ -194,7 +203,7 @@ const pingInterval = setInterval( () => { console.log("clientsMap size: " + clientsMap.size); console.log("matchmakingPlayersMap size: " + matchmakingPlayersMap.size); console.log(""); -}, 5000); +}, 4200); function clientTerminate(client: Client, key: string, map: Map)