From f92248c6d3c53a51207b8fe1f899f6ab0340cc88 Mon Sep 17 00:00:00 2001 From: Halit Aksoy Date: Fri, 6 May 2022 00:07:41 +0300 Subject: [PATCH 1/3] use unique key for mancala game --- src/index.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3c447cb..5f15861 100644 --- a/src/index.ts +++ b/src/index.ts @@ -62,9 +62,7 @@ rtmt.listenMessage(channel_new_game, (userKey: string, message: Object) => { const gameStore = new Map(); matchmaker.onPlayersPaired = (userKey1: string, userKey2: string) => { - const game = new CommonMancalaGame(userKey1, userKey2); - gameStore.set(userKey1, game); - gameStore.set(userKey2, game); + const game = createMancalaGame(userKey1, userKey2); rtmt.sendMessage(userKey1, channel_on_game_start, game); rtmt.sendMessage(userKey2, channel_on_game_start, game); @@ -85,7 +83,7 @@ rtmt.listenMessage(channel_game_move, (userKey: string, message: Object) => { gameStore.delete(game.player2Id); } } catch (err: any) { - console.log(err); + console.error(err); rtmt.sendMessage(game.player1Id, channel_on_game_crashed, err); rtmt.sendMessage(game.player2Id, channel_on_game_crashed, err); } @@ -109,3 +107,10 @@ const deleteGame = (game: MancalaGame) => { gameStore.delete(game.player2Id); } }; + +function createMancalaGame(userKey1: string, userKey2: string) { + const game = new CommonMancalaGame(generateKey(), userKey1, userKey2); + gameStore.set(userKey1, game); + gameStore.set(userKey2, game); + return game; +} From e75eaffd508af9e7b33db68b948031c473868c11 Mon Sep 17 00:00:00 2001 From: Halit Aksoy Date: Fri, 6 May 2022 00:45:53 +0300 Subject: [PATCH 2/3] update mancala.js@0.0.2-beta.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5f90f45..649393c 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@types/ws": "^7.4.5", "cors": "^2.8.5", "express": "^4.17.1", - "mancala.js": "^0.0.1", + "mancala.js": "^0.0.2-beta.0", "morgan": "^1.10.0", "uuid": "^8.3.2", "ws": "^7.5.0" From 2f8a95a971045d4afa4854fc269796a8dee25a70 Mon Sep 17 00:00:00 2001 From: Halit Aksoy Date: Fri, 6 May 2022 00:46:32 +0300 Subject: [PATCH 3/3] add GameCrashManager --- .gitignore | 4 +++- src/GameCrashManager.ts | 37 +++++++++++++++++++++++++++++++++++++ src/index.ts | 4 +++- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/GameCrashManager.ts diff --git a/.gitignore b/.gitignore index 4afb8ba..36c4c4b 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,6 @@ Thumbs.db dist/**/* # ignore yarn.lock -yarn.lock \ No newline at end of file +yarn.lock + +crashes \ No newline at end of file diff --git a/src/GameCrashManager.ts b/src/GameCrashManager.ts new file mode 100644 index 0000000..c513228 --- /dev/null +++ b/src/GameCrashManager.ts @@ -0,0 +1,37 @@ +import { MancalaGame } from "mancala.js"; +import fs from "fs"; +const crashFolder = "./crashes"; +export class GameCrashManager { + constructor() {} + + static createCrashFolderIfNotExist(): void { + if (!fs.existsSync(crashFolder)) { + fs.mkdirSync(crashFolder); + } + } + + static getTime(): string { + let date_ob = new Date(); + let date = ("0" + date_ob.getDate()).slice(-2); + let month = ("0" + (date_ob.getMonth() + 1)).slice(-2); + let year = date_ob.getFullYear(); + let hours = date_ob.getHours(); + let minutes = date_ob.getMinutes(); + let seconds = date_ob.getSeconds(); + let miliSeconds = date_ob.getMilliseconds(); + return `${year}-${month}-${date}-${hours}:${minutes}:${seconds}:${miliSeconds}`; + } + + public static logGameCrash(error: Error, game: MancalaGame): string { + this.createCrashFolderIfNotExist(); + const crash = { + message: error.message, + stack: error.stack, + game, + }; + const crashStr = JSON.stringify(crash); + const crashFileName = `${game.id}::${this.getTime()}`; + fs.writeFile(`${crashFolder}/${crashFileName}`, crashStr, () => {}); + return crashFileName; + } +} diff --git a/src/index.ts b/src/index.ts index 5f15861..7b3ed0d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,6 +17,7 @@ import { } from "./channel_names"; import morgan from "morgan"; import { GameMove } from "./models/GameMove"; +import { GameCrashManager } from "./GameCrashManager"; const app = express(); @@ -77,13 +78,14 @@ rtmt.listenMessage(channel_game_move, (userKey: string, message: Object) => { game.moveByPlayerPit(userKey, gameMove.index); rtmt.sendMessage(game.player1Id, channel_on_game_update, game); rtmt.sendMessage(game.player2Id, channel_on_game_update, game); - if (game.state == "ended") { gameStore.delete(game.player1Id); gameStore.delete(game.player2Id); } } catch (err: any) { console.error(err); + const crashFileName = GameCrashManager.logGameCrash(err, game); + console.info(`Game crash saved to file : ${crashFileName}`); rtmt.sendMessage(game.player1Id, channel_on_game_crashed, err); rtmt.sendMessage(game.player2Id, channel_on_game_crashed, err); }