From 5a08e30df1af5b03efcacc905634a8ba213de511 Mon Sep 17 00:00:00 2001 From: jhalitaksoy Date: Sun, 4 Jul 2021 00:44:15 +0300 Subject: [PATCH] now catching the game crash and sending to the client --- src/channel_names.ts | 1 + src/index.ts | 37 +++++++++++++++++++++++++------------ src/mancala.ts | 1 + 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/channel_names.ts b/src/channel_names.ts index 2324d47..75baf27 100644 --- a/src/channel_names.ts +++ b/src/channel_names.ts @@ -4,3 +4,4 @@ export const channel_game_move = "game_move" export const channel_on_game_update = "on_game_update" export const channel_leave_game = "leave_game" export const channel_on_game_end = "on_game_end" +export const channel_on_game_crashed = "on_game_crashed" \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 6f37f6a..408a33d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,13 +1,11 @@ import express, { Request, Response } from "express"; import * as http from 'http'; -import WebSocket from "ws" import { decodeText, encodeText } from "./rtmt/byte_util"; -import { encode } from "./rtmt/encode_decode_message"; import { RTMTWS } from "./rtmt/rtmt_websocket"; import cors from "cors" import { generateKey } from "./key_factory"; import { MatchMaker } from "./matcmaker"; -import { channel_game_move, channel_leave_game, channel_new_game, channel_on_game_start, channel_on_game_update } from "./channel_names"; +import { channel_game_move, channel_leave_game, channel_new_game, channel_on_game_crashed, channel_on_game_start, channel_on_game_update } from "./channel_names"; import { Bytes } from "./rtmt/rtmt"; import { createGame, Game, GameMove } from "./mancala"; @@ -62,15 +60,24 @@ rtmt.listenMessage(channel_game_move, (userKey: string, message: Bytes) => { const gameMove: GameMove = JSON.parse(decodeText(message)) const game = gameStore.get(userKey) if (game) { - game.moveByIndex(gameMove.index, game.getPlayerNameByKey(userKey)) - const data = encodeText(JSON.stringify(game)) - rtmt.sendMessage(game.player1, channel_on_game_update, data) - rtmt.sendMessage(game.player2, channel_on_game_update, data) + try { + game.moveByIndex(gameMove.index, game.getPlayerNameByKey(userKey)) + const data = encodeText(JSON.stringify(game)) + rtmt.sendMessage(game.player1, channel_on_game_update, data) + rtmt.sendMessage(game.player2, channel_on_game_update, data) - if (game.state == "ended") { - gameStore.delete(game.player1) - gameStore.delete(game.player2) + if (game.state == "ended") { + gameStore.delete(game.player1) + gameStore.delete(game.player2) + } + } catch (err) { + console.log(err); + deleteGame(game) + const data = encodeText(err.toString()) + rtmt.sendMessage(game.player1, channel_on_game_crashed, data) + rtmt.sendMessage(game.player2, channel_on_game_crashed, data) } + } else { console.log("Game not found!"); } @@ -79,10 +86,16 @@ rtmt.listenMessage(channel_game_move, (userKey: string, message: Bytes) => { rtmt.listenMessage(channel_leave_game, (userKey: string, message: Bytes) => { const game = gameStore.get(userKey) if (game) { - gameStore.delete(game.player1) - gameStore.delete(game.player2) + deleteGame(game) const data = encodeText(JSON.stringify(game)) rtmt.sendMessage(game.player1, channel_on_game_update, data) rtmt.sendMessage(game.player2, channel_on_game_update, data) } }) + +const deleteGame = (game: Game) => { + if (game) { + gameStore.delete(game.player1) + gameStore.delete(game.player2) + } +} diff --git a/src/mancala.ts b/src/mancala.ts index 5eee132..5fd5e50 100644 --- a/src/mancala.ts +++ b/src/mancala.ts @@ -14,6 +14,7 @@ export class Game { } public moveByIndex(holeIndex: number, player: "player1" | "player2") { + throw new Error("afdad") let hole = this.board.player1Holes[holeIndex] if (player == "player2") {