From c29db6d5f3559b592fc9373a184d68897151d00b Mon Sep 17 00:00:00 2001 From: LuckyLaszlo Date: Mon, 19 Dec 2022 21:48:16 +0100 Subject: [PATCH] WIP token identification --- .../game_back/src/server/class/GameSession.ts | 1 - .../game_back/src/server/wsServer.ts | 51 +++++---- .../game_back/src/shared_js/class/Event.ts | 6 +- .../api_front/src/pages/GamePage.svelte | 106 ------------------ .../api_front/src/pages/game/Game.svelte | 18 ++- .../api_front/src/pages/game/client/ws.ts | 12 +- .../src/pages/game/shared_js/class/Event.ts | 6 +- 7 files changed, 58 insertions(+), 142 deletions(-) delete mode 100644 srcs/requirements/svelte/api_front/src/pages/GamePage.svelte 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 b6878dc1..78e645f5 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 @@ -244,7 +244,6 @@ export class GameSession { id: this.id, scoreLeft: gc.scoreLeft, scoreRight: gc.scoreRight, - isPrivateMatch: this.isPrivateMatch, }) }); */ 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 3f20fd4d..4554046c 100644 --- a/srcs/requirements/game_server/game_back/src/server/wsServer.ts +++ b/srcs/requirements/game_server/game_back/src/server/wsServer.ts @@ -19,7 +19,7 @@ import { gameSessionIdPLACEHOLDER } from "./constants.js"; const wsPort = 8042; export const wsServer = new WebSocketServer({host: "0.0.0.0", port: wsPort, path: "/pong"}); const clientsMap: Map = new Map; // socket.id/Client -const matchmakingPlayersMap: Map = new Map; // socket.id/ClientPlayer (duplicates with clientsMap) // TODO: rename in matchmakingMap +const matchmakingMap: Map = new Map; // socket.id/ClientPlayer (duplicates with clientsMap) const privateMatchmakingMap: Map = new Map; // socket.id/ClientPlayer (duplicates with clientsMap) const gameSessionsMap: Map = new Map; // GameSession.id(url)/GameSession @@ -67,36 +67,38 @@ async function clientAnnounceListener(this: WebSocket, data: string) { const announce: ev.ClientAnnouncePlayer = msg; - /* // WIP nest, fetch token validation + // WIP nest, fetch token validation + const body = { + playerOneUsername: announce.username, + playerTwoUsername: "", + gameOptions: announce.matchOptions, + isGameIsWithInvitation: announce.privateMatch, + token: announce.token, + }; + if (announce.privateMatch) { + body.playerTwoUsername = announce.playerTwoUsername; + } const response = await fetch(c.addressBackEnd + "/game/validateToken", { method: "POST", headers: { "Content-Type": "application/json", }, - body: JSON.stringify({ - token: announce.token, - username: announce.username, - }) + body: JSON.stringify(body) }); - switch (response.status) + if (!response.ok) { - case 200: - case 204: - break; - case 403: - default: - // send message to client ? or just gtfo ? - clientTerminate(clientsMap.get(this.id)); - return; - } */ - + // send message to client ? or just gtfo ? + clientTerminate(clientsMap.get(this.id)); + return; + } + const player = clientsMap.get(this.id) as ClientPlayer; player.matchOptions = announce.matchOptions; player.token = announce.token; player.username = announce.username; - this.send(JSON.stringify( new ev.EventAssignId(this.id) )); + this.send(JSON.stringify( new ev.EventAssignId(this.id) )); // unused this.send(JSON.stringify( new ev.ServerEvent(en.EventTypes.matchmakingInProgress) )); if (announce.privateMatch) { privateMatchmaking(player); @@ -136,11 +138,11 @@ function publicMatchmaking(player: ClientPlayer) { const minPlayersNumber = 2; const maxPlayersNumber = 2; - matchmakingPlayersMap.set(player.id, player); + matchmakingMap.set(player.id, player); const matchOptions = player.matchOptions; const compatiblePlayers: ClientPlayer[] = []; - for (const [id, client] of matchmakingPlayersMap) + for (const [id, client] of matchmakingMap) { if (client.matchOptions === matchOptions) { @@ -153,7 +155,7 @@ function publicMatchmaking(player: ClientPlayer) if (compatiblePlayers.length >= minPlayersNumber) { compatiblePlayers.forEach((client) => { - matchmakingPlayersMap.delete(client.id); + matchmakingMap.delete(client.id); }); createGameSession(compatiblePlayers, matchOptions); } @@ -309,7 +311,8 @@ const pingInterval = setInterval( () => { } console.log("gameSessionMap size: " + gameSessionsMap.size); console.log("clientsMap size: " + clientsMap.size); - console.log("matchmakingPlayersMap size: " + matchmakingPlayersMap.size); + console.log("matchmakingMap size: " + matchmakingMap.size); + console.log("privateMatchmakingMap size: " + privateMatchmakingMap.size); console.log(""); }, 4200); @@ -329,8 +332,8 @@ function clientTerminate(client: Client) } } clientsMap.delete(client.id); - if (matchmakingPlayersMap.has(client.id)) { - matchmakingPlayersMap.delete(client.id); + if (matchmakingMap.has(client.id)) { + matchmakingMap.delete(client.id); } else if (privateMatchmakingMap.has(client.id)) { privateMatchmakingMap.delete(client.id); diff --git a/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts b/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts index 10e9d580..d1f8b671 100644 --- a/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts @@ -94,12 +94,16 @@ export class ClientAnnouncePlayer extends ClientAnnounce { token: string; username: string; privateMatch: boolean; - constructor(matchOptions: en.MatchOptions, token: string, username: string, privateMatch: boolean = false) { + playerTwoUsername?: string; + constructor(matchOptions: en.MatchOptions, token: string, username: string, privateMatch: boolean = false, playerTwoUsername?: string) { super(en.ClientRole.player); this.matchOptions = matchOptions; this.token = token; this.username = username; this.privateMatch = privateMatch; + if (playerTwoUsername) { + this.playerTwoUsername = playerTwoUsername; + } } } diff --git a/srcs/requirements/svelte/api_front/src/pages/GamePage.svelte b/srcs/requirements/svelte/api_front/src/pages/GamePage.svelte deleted file mode 100644 index 5e08c6f4..00000000 --- a/srcs/requirements/svelte/api_front/src/pages/GamePage.svelte +++ /dev/null @@ -1,106 +0,0 @@ - - - -
-
- game options -
- - -
-
- - -
-
- - - - - -
-
- -
-
-
- -
-

--- keys ---

-

move up: 'w' or 'up arrow'

-

move down: 's' OR 'down arrow'

-

grid on/off: 'g'

-
- -
- -
- - - - - \ No newline at end of file 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 d537a794..e2eb12ab 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte @@ -20,16 +20,18 @@ let moving_walls = false; let matchOptions : enumeration.MatchOptions = enumeration.MatchOptions.noOption; - - // En async au cas où pour la suite mais apriori inutile, les check se feront sûrement au onMount const init = async() => { + // WIP nest, fetch token generation + const address = "http://transcendance:8080"; + const responsePromise = fetch(address + "/token"); + if (sound === "off") { initAudio(true); } else if (sound === "on") { initAudio(false); } - console.log(sound); + console.log(sound); //debug if (multi_balls === true) { matchOptions |= enumeration.MatchOptions.multiBalls; @@ -43,7 +45,15 @@ initPong(new GameArea()); initGc(new GameComponentsClient(matchOptions, pong.ctx)); initStartFunction(start); - initWebSocket(matchOptions); + + const response = await responsePromise; + if (!response.ok) { + console.log("Token retrieve failed"); // TODO: error message + return; + } + const responseJson = await response.json(); + initWebSocket(matchOptions, responseJson.token, "usernamePLACEHOLDER"); + // ou est stocké le username dans le front svelte ? } function start() : void { diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts index f080b61d..dc9a88fd 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts @@ -31,14 +31,16 @@ export const clientInfo = new ClientInfo(); export const clientInfoSpectator = new ClientInfoSpectator(); // WIP, could refactor this -const tokenPLACEHOLDER = ""; -const usernamePLACEHOLDER = ""; -const privateMatchPLACEHOLDER = false; -export function initWebSocket(options: en.MatchOptions) +export function initWebSocket(options: en.MatchOptions, token: string, username: string, privateMatch = false, playerTwoUsername?: string) { socket = new WebSocket(wsUrl, "json"); socket.addEventListener("open", (event) => { - socket.send(JSON.stringify( new ev.ClientAnnouncePlayer(options, tokenPLACEHOLDER, usernamePLACEHOLDER, privateMatchPLACEHOLDER) )); + if (privateMatch) { + socket.send(JSON.stringify( new ev.ClientAnnouncePlayer(options, token, username, privateMatch, playerTwoUsername) )); + } + else { + socket.send(JSON.stringify( new ev.ClientAnnouncePlayer(options, token, username) )); + } }); // socket.addEventListener("message", logListener); // for testing purpose socket.addEventListener("message", preMatchListener); diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts index 10e9d580..d1f8b671 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts @@ -94,12 +94,16 @@ export class ClientAnnouncePlayer extends ClientAnnounce { token: string; username: string; privateMatch: boolean; - constructor(matchOptions: en.MatchOptions, token: string, username: string, privateMatch: boolean = false) { + playerTwoUsername?: string; + constructor(matchOptions: en.MatchOptions, token: string, username: string, privateMatch: boolean = false, playerTwoUsername?: string) { super(en.ClientRole.player); this.matchOptions = matchOptions; this.token = token; this.username = username; this.privateMatch = privateMatch; + if (playerTwoUsername) { + this.playerTwoUsername = playerTwoUsername; + } } }