You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.9 KiB
61 lines
1.9 KiB
import { GamesLog } from "./logging/games_log.js"; |
|
import { Tournament } from "./tournament/tournament.js"; |
|
import { Board } from "./game/board.js"; |
|
import { RankingReport } from "./reports/ranking_report.js"; |
|
import { BaseError } from "./common_errors/base_error.js"; |
|
import { ArgParse } from "./utils/arg_parse.js"; |
|
|
|
function printUsage() { |
|
console.log("Usage: npm start -- boardFile gameLogFile [options]"); |
|
console.log(" options:"); |
|
console.log(" -h --help Print this message"); |
|
console.log(" -m --maxPlayersPerGame Maximum players per game"); |
|
console.log(" -d --debug Print stack trace on error"); |
|
} |
|
|
|
async function main() { |
|
// Process command line arguments |
|
if (ArgParse.getBooleanArg("h", "help")) return printUsage(); |
|
|
|
const boardFilename = ArgParse.getStringArg(2); |
|
if (!boardFilename) return printUsage(); |
|
|
|
const gameLogFilename = ArgParse.getStringArg(3); |
|
if (!gameLogFilename) return printUsage(); |
|
|
|
const maxPlayersPerGame = |
|
ArgParse.getIntegerArg("m", "maxPlayersPerGame") ?? 2; |
|
|
|
// Set up tournament |
|
const board = await Board.loadFromFile(boardFilename); |
|
const tournament = new Tournament(board, { maxPlayersPerGame }); |
|
|
|
// Retrieve game events |
|
const gamesLog = new GamesLog(); |
|
await gamesLog.loadFile(gameLogFilename); |
|
const gameEvents = await gamesLog.readEvents(); |
|
|
|
// Process game events |
|
tournament.processEvents(gameEvents); |
|
tournament.requireCompletion(); |
|
|
|
// Generate and print report |
|
const rankingReport = new RankingReport(tournament); |
|
rankingReport.printPlayerSummary(); |
|
} |
|
|
|
try { |
|
await main(); |
|
} catch (err) { |
|
if (err instanceof BaseError) { |
|
const printTrace = ArgParse.getBooleanArg("d", "debug"); |
|
if (printTrace) { |
|
console.error(err); |
|
} else { |
|
console.log(`Error: ${err.message}`); |
|
} |
|
} else { |
|
// Non-Application Error, re-throw |
|
throw err; |
|
} |
|
}
|
|
|