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 322b845d..287c1c02 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
@@ -48,7 +48,10 @@ export class GameSession {
timeout += c.newRoundDelay*0.5;
});
}
- resume(s: GameSession) {
+ resume(s?: GameSession)
+ {
+ if (!s) { s = this; }
+
s.playersMap.forEach( (client) => {
client.socket.on("message", clientInputListener);
});
@@ -59,7 +62,10 @@ export class GameSession {
s.playersUpdateInterval = setInterval(s._playersUpdate, c.playersUpdateIntervalMS, s);
s.spectatorsUpdateInterval = setInterval(s._spectatorsUpdate, c.spectatorsUpdateIntervalMS, s);
}
- pause(s: GameSession) {
+ pause(s?: GameSession)
+ {
+ if (!s) { s = this; }
+
s.playersMap.forEach( (client) => {
client.socket.off("message", clientInputListener);
});
@@ -68,6 +74,19 @@ export class GameSession {
clearInterval(s.playersUpdateInterval);
clearInterval(s.spectatorsUpdateInterval);
}
+ destroy(s?: GameSession)
+ {
+ if (!s) { s = this; }
+
+ s.pause();
+
+ s.spectatorsMap.forEach((client) => {
+ clientTerminate(client);
+ });
+ s.playersMap.forEach((client) => {
+ clientTerminate(client);
+ });
+ }
instantInputDebug(client: ClientPlayer) {
this._handleInput(c.fixedDeltaTime, client);
}
@@ -200,26 +219,35 @@ export class GameSession {
ball.speed = ball.baseSpeed;
ball.ballInPlay = true;
}
- private _checkDisconnexions() {
+ private _checkDisconnexions()
+ {
if (this.playersMap.size !== 2)
{
this.matchEnded = true;
- if (this.playersMap.size != 0)
- {
- console.log("Forfeit Ending");
- const gc = this.components;
- const luckyWinner: ClientPlayer = this.playersMap.values().next().value;
- if (luckyWinner.racket === gc.playerLeft) {
- this._matchEnd(en.PlayerSide.left, true);
- }
- else {
- this._matchEnd(en.PlayerSide.right, true);
- }
+ if (this.playersMap.size != 0) {
+ this._forfeit();
+ }
+ else {
+ // WIP: envoyer un truc à Nest ? Genre "match draw"
+ this.destroy();
}
return true;
}
return false;
}
+ private _forfeit()
+ {
+ this.matchEnded = true;
+ console.log("Forfeit Ending");
+ const gc = this.components;
+ const luckyWinner: ClientPlayer = this.playersMap.values().next().value;
+ if (luckyWinner.racket === gc.playerLeft) {
+ this._matchEnd(en.PlayerSide.left, true);
+ }
+ else {
+ this._matchEnd(en.PlayerSide.right, true);
+ }
+ }
private async _matchEnd(winner: en.PlayerSide, forfeit_flag: boolean = false)
{
this.matchEnded = true;
@@ -246,15 +274,7 @@ export class GameSession {
})
});
- const gameSession = this;
- setTimeout(function kickRemainingClients() {
- gameSession.spectatorsMap.forEach((client) => {
- clientTerminate(client);
- });
- gameSession.playersMap.forEach((client) => {
- clientTerminate(client);
- });
- }, 15000);
+ setTimeout(this.destroy, 15000, this);
// logs
if (winner === en.PlayerSide.left) {
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 d28fcff9..8b3226bb 100644
--- a/srcs/requirements/game_server/game_back/src/server/wsServer.ts
+++ b/srcs/requirements/game_server/game_back/src/server/wsServer.ts
@@ -40,6 +40,14 @@ function connectionListener(socket: WebSocket, request: IncomingMessage)
console.log(`client ${shortId(client.id)} is alive`);
});
+ socket.on("error", function errorPrint(this: WebSocket, err: Error) {
+ console.log(`error socket ${shortId(this.id)}:`);
+ console.log(`${err.name}: ${err.message}`);
+ if (err.stack) {
+ console.log(`err.stack: ${err.stack}`);
+ }
+ });
+
socket.on("message", function log(data: string) {
try {
const event: ev.ClientEvent = JSON.parse(data);
@@ -96,10 +104,13 @@ async function clientAnnounceListener(this: WebSocket, data: string)
const player = clientsMap.get(this.id) as ClientPlayer;
player.matchOptions = announce.matchOptions;
player.token = announce.token;
- announce.isInvitedPerson ? player.username = announce.playerTwoUsername : player.username = announce.username;
+ player.username = announce.username;
this.send(JSON.stringify( new ev.EventAssignId(this.id) )); // unused
this.send(JSON.stringify( new ev.ServerEvent(en.EventTypes.matchmakingInProgress) ));
if (announce.privateMatch) {
+ if (announce.isInvitedPerson) {
+ player.username = announce.playerTwoUsername;
+ }
privateMatchmaking(player);
}
else {
@@ -365,9 +376,7 @@ export function clientTerminate(client: Client)
client.gameSession.playersMap.delete(client.id);
if (client.gameSession.playersMap.size === 0)
{
- clearInterval(client.gameSession.playersUpdateInterval);
- clearInterval(client.gameSession.spectatorsUpdateInterval);
- clearInterval(client.gameSession.gameLoopInterval);
+ client.gameSession.destroy();
gameSessionsMap.delete(client.gameSession.id);
}
}
diff --git a/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte b/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte
deleted file mode 100644
index 9807f136..00000000
--- a/srcs/requirements/svelte/api_front/src/pages/SpectatorMatchList.svelte
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
(push('/'))}>