From 11e5c08154df3f3fa92d714b7c66154d02d029aa Mon Sep 17 00:00:00 2001 From: Zutatensuppe Date: Thu, 24 Dec 2020 14:19:21 +0100 Subject: [PATCH] load single game for fixing --- scripts/fix_tiles.js | 2 +- server/Game.js | 65 ++++++++++++++++++++++++-------------------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/scripts/fix_tiles.js b/scripts/fix_tiles.js index 832bcb8..f214d27 100644 --- a/scripts/fix_tiles.js +++ b/scripts/fix_tiles.js @@ -3,7 +3,7 @@ import GameCommon from '../common/GameCommon.js' import Game from '../server/Game.js' function fix_tiles(gameId) { - Game.loadAllGames() + Game.loadGame(gameId) let changed = false const tiles = GameCommon.getTilesSortedByZIndex(gameId) for (let tile of tiles) { diff --git a/server/Game.js b/server/Game.js index 6984a65..e4da166 100644 --- a/server/Game.js +++ b/server/Game.js @@ -11,40 +11,46 @@ const DATA_DIR = './../data' function loadAllGames() { const files = fs.readdirSync(DATA_DIR) for (const f of files) { - if (!f.match(/\.json$/)) { + const m = f.match(/^([a-z0-9]+)\.json$/) + if (!m) { continue } - const file = `${DATA_DIR}/${f}` - const contents = fs.readFileSync(file, 'utf-8') - let game - try { - game = JSON.parse(contents) - } catch { - console.log(`[ERR] unable to load game from file ${f}`); - } - if (typeof game.puzzle.data.started === 'undefined') { - game.puzzle.data.started = Math.round(fs.statSync(file).ctimeMs) - } - if (typeof game.puzzle.data.finished === 'undefined') { - let unfinished = game.puzzle.tiles.map(Util.decodeTile).find(t => t.owner !== -1) - game.puzzle.data.finished = unfinished ? 0 : Util.timestamp() - } - if (!Array.isArray(game.players)) { - game.players = Object.values(game.players) - } - GameCommon.newGame({ - id: game.id, - rng: { - type: game.rng ? game.rng.type : '_fake_', - obj: game.rng ? Rng.unserialize(game.rng.obj) : new Rng(), - }, - puzzle: game.puzzle, - players: game.players, - evtInfos: {} - }) + const gameId = m[1] + loadGame(gameId) } } +function loadGame(gameId) { + const file = `${DATA_DIR}/${gameId}.json` + const contents = fs.readFileSync(file, 'utf-8') + let game + try { + game = JSON.parse(contents) + } catch { + console.log(`[ERR] unable to load game from file ${file}`); + } + if (typeof game.puzzle.data.started === 'undefined') { + game.puzzle.data.started = Math.round(fs.statSync(file).ctimeMs) + } + if (typeof game.puzzle.data.finished === 'undefined') { + let unfinished = game.puzzle.tiles.map(Util.decodeTile).find(t => t.owner !== -1) + game.puzzle.data.finished = unfinished ? 0 : Util.timestamp() + } + if (!Array.isArray(game.players)) { + game.players = Object.values(game.players) + } + GameCommon.newGame({ + id: game.id, + rng: { + type: game.rng ? game.rng.type : '_fake_', + obj: game.rng ? Rng.unserialize(game.rng.obj) : new Rng(), + }, + puzzle: game.puzzle, + players: game.players, + evtInfos: {} + }) +} + const changedGames = {} async function createGameObject(gameId, targetTiles, image, ts) { const seed = Util.hash(gameId + ' ' + ts) @@ -130,6 +136,7 @@ function persistGame(gameId) { export default { createGameObject, loadAllGames, + loadGame, persistChangedGames, persistGame, createGame,