diff options
| author | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-04-24 00:34:07 +0200 |
|---|---|---|
| committer | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-04-24 00:34:07 +0200 |
| commit | 13dcc2c8fc1d11e3b94432fffc4c4f186bd94d29 (patch) | |
| tree | 077a963bae31729dffa6c7c678af112680bb6d38 /backend | |
| parent | 457ee1d7caa899bbe86bf7a1390f940b5b3176b7 (diff) | |
| download | fia-13dcc2c8fc1d11e3b94432fffc4c4f186bd94d29.tar.gz fia-13dcc2c8fc1d11e3b94432fffc4c4f186bd94d29.tar.zst fia-13dcc2c8fc1d11e3b94432fffc4c4f186bd94d29.zip | |
Playing almost working
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/ts/api/getCurrentGameState.ts | 25 | ||||
| -rw-r--r-- | backend/ts/api/login.ts | 46 | ||||
| -rw-r--r-- | backend/ts/api/readyStateToggle.ts | 46 | ||||
| -rw-r--r-- | backend/ts/api/saveGameBoard.ts | 16 | ||||
| -rw-r--r-- | backend/ts/api/startPoint.ts | 12 | ||||
| -rw-r--r-- | backend/ts/gameBoard.ts | 99 | ||||
| -rw-r--r-- | backend/ts/index.ts | 4 | ||||
| -rw-r--r-- | backend/ts/startGame.ts | 41 |
8 files changed, 214 insertions, 75 deletions
diff --git a/backend/ts/api/getCurrentGameState.ts b/backend/ts/api/getCurrentGameState.ts index 7efa009..028cf04 100644 --- a/backend/ts/api/getCurrentGameState.ts +++ b/backend/ts/api/getCurrentGameState.ts @@ -1,16 +1,25 @@ import { Request, Response } from "express"; -import { Data, makeQuery } from "../../../helpers/helpersBack"; +import { Data, makeQuery, getData, API_RES, GameBoard } from "../../../helpers/helpersBack"; export default async function getCurrentGameState(req: Request, res: Response) { - if (req.session === undefined /* || req.body.state === undefined */) { - res.status(500); - res.send(""); + // console.log("request.session", req.session) + if (req.session === undefined || req.session.gid === undefined) { + res.status(400); + res.send(API_RES.failure); return; } - let dbRes: {gameBoard: Data, currentPlayer: number} - = (await makeQuery("SELECT `gameBoard`, `currentPlayer` FROM `fia` WHERE `id` = ?", [req.session.gid]))[0], - currentPlayer = dbRes.currentPlayer === req.session.index; + let dbRes: { gameBoard: GameBoard, currentPlayer: number, started: number, data: Data, timeTillTurnEnd: number } + = (await makeQuery("SELECT `gameBoard`, `currentPlayer`, `started`, `data`, `timeTillTurnEnd`" + + " FROM `fia` WHERE `id` = ?", + [req.session.gid]))[0]; + + + if (dbRes.started === 0) { + res.send(JSON.stringify({ data: dbRes.data })); + } else { + res.send(JSON.stringify(dbRes)); + } + - res.send(JSON.stringify({gameBoard: dbRes.gameBoard, currentPlayer})); }
\ No newline at end of file diff --git a/backend/ts/api/login.ts b/backend/ts/api/login.ts index 0c6ef75..b21a506 100644 --- a/backend/ts/api/login.ts +++ b/backend/ts/api/login.ts @@ -1,6 +1,7 @@ import { Request, Response } from "express"; -import { fiaTable, dbRes, Color, Colors, Helpers, makeQuery, Chequer, tColors } from "../../../helpers/helpersBack"; +import { fiaTable, dbRes, Color, Colors, Helpers, makeQuery, Chequer, tColors, waitForQueue } from "../../../helpers/helpersBack"; import startGame from "../startGame"; +import { global } from "../index"; export default async function apiLogin(req: Request, res: Response) { if (req.session === undefined) { @@ -11,27 +12,39 @@ export default async function apiLogin(req: Request, res: Response) { req.session.uid = req.session.id; req.session.name = req.body.name; - let dbRes = (await makeQuery("SELECT * FROM `fia` WHERE `started`= 0 LIMIT 1", [])) as Array<dbRes>, + if (global.stop === true) { + await waitForQueue(); + } + global.stop = true; + + let dbRes = (await makeQuery("SELECT * FROM `fia` WHERE `started`= 0 LIMIT 1", [])) as Array<fiaTable>, row: fiaTable; - if (dbRes.length === 0) { - let color = Helpers.getRandomInt(0, 5); + if (dbRes[0] === undefined) { + let color = Helpers.getRandomInt(0, 4); row = {} as fiaTable; row.data = [{ id: req.session.uid, index: 0, - color: Color[color as keyof Colors], + ready: false, + color: color, name: req.body.name, }]; - req.session.color = Color.blue; + req.session.color = color; - await makeQuery('INSERT INTO `fia`(`data`, `started`) VALUES (?, ?)', [JSON.stringify(row.data), 0]); - req.session.gid = (await makeQuery('SELECT `id` FROM `fia` WHERE `data`= ?', [JSON.stringify(row.data)]) as any)[0].id; + await makeQuery('INSERT INTO `fia`(`data`) VALUES (?)', [row.data]); + req.session.gid = (await makeQuery('SELECT `id` FROM `fia` WHERE `data`= ?', [row.data]) as any)[0].id; } else { - row = Helpers.dbResToFiaTable(dbRes[0]); + // row = Helpers.dbResToFiaTable(dbRes[0]); + row = dbRes[0]; let playersColors: Array<tColors> = [], colors = [...Array(4).keys()]; + if (row.data.filter(el => el.id !== req.session?.uid).length === 0) { + res.send(JSON.stringify({ data: row.data, uid: req.session.uid })); + return; + } + for (let playerData of row.data) playersColors.push(playerData.color); @@ -42,6 +55,7 @@ export default async function apiLogin(req: Request, res: Response) { row.data.push({ id: req.session.uid, index: index, + ready: false, color: color, name: req.body.name, }); @@ -49,12 +63,14 @@ export default async function apiLogin(req: Request, res: Response) { req.session.gid = row.id; req.session.index = index; - makeQuery('UPDATE `fia` SET `data`= ? WHERE `id`= ?', [JSON.stringify(row.data), row.id]); + await makeQuery('UPDATE `fia` SET `data`= ? WHERE `id`= ?', [row.data, row.id]); + + if (row.data.length >= 4) + startGame(req.session.gid); - if (row.data.length === 4) { - startGame(req, res); - } } - makeQuery("UPDATE `fia` SET `playersCount`=`playersCount`+1 WHERE `id`= ?", [req.session.gid]); - res.send(JSON.stringify(row.data)); + + await makeQuery("UPDATE `fia` SET `playersCount`=`playersCount`+1 WHERE `id`= ?", [req.session.gid]); + global.stop = false; + res.send(JSON.stringify({ data: row.data, uid: req.session.uid })); } diff --git a/backend/ts/api/readyStateToggle.ts b/backend/ts/api/readyStateToggle.ts index 6bca5b2..e1b08b2 100644 --- a/backend/ts/api/readyStateToggle.ts +++ b/backend/ts/api/readyStateToggle.ts @@ -1,19 +1,43 @@ import { Request, Response } from "express"; -import { makeQuery } from "../../../helpers/helpersBack"; +import { makeQuery, Data, getData, API_RES, waitForQueue } from "../../../helpers/helpersBack"; import startGame from "../startGame"; +import {global} from "../index"; export default async function (req: Request, res: Response) { - if (req.session === undefined || req.body.state === undefined) { + if (req.session === undefined || req.body.state === undefined || req.session.gid === undefined) { res.status(500); - res.send(""); + res.send(API_RES.failure); return; } - await makeQuery("UPDATE `fia` SET `playersAreReady`=`playersAreReady`+" + (req.body.state ? 1 : -1) - + " WHERE `id`=" + req.session.gid, []); - let start = ( - await makeQuery('SELECT playersAreReady=playersCount and playersCount > 1 "start" FROM `fia` WHERE `id`= ?', - [req.session.gid]) - )[0].start; - if(start === 1) - startGame(req, res); + + if(global.stop === true) { + await waitForQueue(); + } + global.stop = true; + + let data: { data: Data, started: number } = + (await makeQuery("SELECT `data`, `started` FROM `fia` WHERE `id` = ?", [req.session.gid]))[0], + i = 1, + started = false; + + if (data.started === 0) { + + for (let player of data.data) { + if (player.id === req.session.uid) + player.ready = req.body.state ? true : false; + else if (player.ready === true) + i++; + } + + await makeQuery("UPDATE `fia` SET `data` = ?, `playersAreReady`=`playersAreReady`+ ? WHERE `id`= ?", + [data.data, (req.body.state ? 1 : -1), req.session.gid]); + + if (data.data.length > 1 && data.data.length === i) { + startGame(req.session.gid); + started = true; + } + + } + global.stop = false; + res.send(`{"success": true, "started": ${started}}`); } diff --git a/backend/ts/api/saveGameBoard.ts b/backend/ts/api/saveGameBoard.ts new file mode 100644 index 0000000..551c185 --- /dev/null +++ b/backend/ts/api/saveGameBoard.ts @@ -0,0 +1,16 @@ +import { Request, Response } from "express"; +import { API_RES, makeQuery } from "../../../helpers/helpersBack"; + +export default async function saveGameBoard(req: Request, res: Response) { + if(req.session === undefined || req.body.gameBoard === undefined) { + res.status(400); + res.send(API_RES.failure); + return; + } + + await makeQuery("UPDATE `fia` SET `gameBoard` = ? WHERE `id` = ? ", [ + req.body.gameBoard, req.session.gid + ]); + + res.send(API_RES.success); +}
\ No newline at end of file diff --git a/backend/ts/api/startPoint.ts b/backend/ts/api/startPoint.ts index d635622..20d7b79 100644 --- a/backend/ts/api/startPoint.ts +++ b/backend/ts/api/startPoint.ts @@ -2,16 +2,12 @@ import { Request, Response } from "express"; import { makeQuery } from "../../../helpers/helpersBack"; export default async function (req: Request, res: Response) { - if (req.session === undefined) { - res.send(/* html */ `<script>alert("Something went wrong, try to reload the page")</script>`); - return; - } - // console.log("uid:", req.session.uid, "gid:", req.session.gid); - if (req.session.uid !== undefined) { - let data = await makeQuery('SELECT `data` FROM `fia` WHERE `id`=?', [req.session.gid]); + if (req.session !== undefined && req.session.gid !== undefined) { + let data = (await makeQuery('SELECT `data` FROM `fia` WHERE `id`=?', [req.session.gid]))[0]; res.send(JSON.stringify({ status: true, - data: data + data: data, + uid: req.session.uid })) } else { diff --git a/backend/ts/gameBoard.ts b/backend/ts/gameBoard.ts new file mode 100644 index 0000000..89a8902 --- /dev/null +++ b/backend/ts/gameBoard.ts @@ -0,0 +1,99 @@ +import { Color, GameBoard } from '../../helpers/helpersBack'; +export const gameBoard: GameBoard = { + map: [ + { y: 0, x: 4, chequers: [], start: Color.red }, + { y: 1, x: 4, chequers: [], start: -1 }, + { y: 2, x: 4, chequers: [], start: -1 }, + { y: 3, x: 4, chequers: [], start: -1 }, + { y: 4, x: 4, chequers: [], start: -1 }, + { y: 4, x: 3, chequers: [], start: -1 }, + { y: 4, x: 2, chequers: [], start: -1 }, + { y: 4, x: 1, chequers: [], start: -1 }, + { y: 4, x: 0, chequers: [], start: -1 }, + { y: 5, x: 0, chequers: [], start: -1 }, + { y: 6, x: 0, chequers: [], start: Color.blue }, + { y: 6, x: 1, chequers: [], start: -1 }, + { y: 6, x: 2, chequers: [], start: -1 }, + { y: 6, x: 3, chequers: [], start: -1 }, + { y: 6, x: 4, chequers: [], start: -1 }, + { y: 7, x: 4, chequers: [], start: -1 }, + { y: 8, x: 4, chequers: [], start: -1 }, + { y: 9, x: 4, chequers: [], start: -1 }, + { y: 10, x: 4, chequers: [], start: -1 }, + { y: 10, x: 5, chequers: [], start: -1 }, + { y: 10, x: 6, chequers: [], start: Color.green }, + { y: 9, x: 6, chequers: [], start: -1 }, + { y: 8, x: 6, chequers: [], start: -1 }, + { y: 7, x: 6, chequers: [], start: -1 }, + { y: 6, x: 6, chequers: [], start: -1 }, + { y: 6, x: 7, chequers: [], start: -1 }, + { y: 6, x: 8, chequers: [], start: -1 }, + { y: 6, x: 9, chequers: [], start: -1 }, + { y: 6, x: 10, chequers: [], start: -1 }, + { y: 5, x: 10, chequers: [], start: -1 }, + { y: 4, x: 10, chequers: [], start: Color.yellow }, + { y: 4, x: 9, chequers: [], start: -1 }, + { y: 4, x: 8, chequers: [], start: -1 }, + { y: 4, x: 7, chequers: [], start: -1 }, + { y: 4, x: 6, chequers: [], start: -1 }, + { y: 3, x: 6, chequers: [], start: -1 }, + { y: 2, x: 6, chequers: [], start: -1 }, + { y: 1, x: 6, chequers: [], start: -1 }, + { y: 0, x: 6, chequers: [], start: -1 }, + { y: 0, x: 5, chequers: [], start: -1 }, + ], + // @ts-ignore + bases: { + [Color.red]: [ + { x: 1, y: 1, chequer: -1 }, + { x: 1, y: 2, chequer: -1 }, + { x: 2, y: 2, chequer: -1 }, + { x: 2, y: 1, chequer: -1 }, + ], + [Color.blue]: [ + { x: 8, y: 1, chequer: -1 }, + { x: 9, y: 1, chequer: -1 }, + { x: 9, y: 2, chequer: -1 }, + { x: 8, y: 2, chequer: -1 }, + ], + [Color.green]: [ + { x: 8, y: 8, chequer: -1 }, + { x: 9, y: 8, chequer: -1 }, + { x: 9, y: 9, chequer: -1 }, + { x: 8, y: 9, chequer: -1 }, + ], + [Color.yellow]: [ + { x: 1, y: 8, chequer: -1 }, + { x: 2, y: 8, chequer: -1 }, + { x: 2, y: 9, chequer: -1 }, + { x: 1, y: 9, chequer: -1 }, + ], + }, + // @ts-ignore + homes: { + [Color.red]: [ + { x: 5, y: 1, chequer: -1 }, + { x: 5, y: 2, chequer: -1 }, + { x: 5, y: 3, chequer: -1 }, + { x: 5, y: 4, chequer: -1 }, + ], + [Color.blue]: [ + { x: 1, y: 5, chequer: -1 }, + { x: 2, y: 5, chequer: -1 }, + { x: 3, y: 5, chequer: -1 }, + { x: 4, y: 5, chequer: -1 }, + ], + [Color.green]: [ + { x: 5, y: 9, chequer: -1 }, + { x: 5, y: 8, chequer: -1 }, + { x: 5, y: 7, chequer: -1 }, + { x: 5, y: 6, chequer: -1 }, + ], + [Color.yellow]: [ + { x: 9, y: 5, chequer: -1 }, + { x: 8, y: 5, chequer: -1 }, + { x: 7, y: 5, chequer: -1 }, + { x: 6, y: 5, chequer: -1 }, + ], + } +}
\ No newline at end of file diff --git a/backend/ts/index.ts b/backend/ts/index.ts index d0899dd..e4ec5ee 100644 --- a/backend/ts/index.ts +++ b/backend/ts/index.ts @@ -6,6 +6,9 @@ import login from "./api/login"; import startPoint from "./api/startPoint"; import readyStateToggle from "./api/readyStateToggle"; import getCurrentGameState from "./api/getCurrentGameState"; +import saveGameBoard from "./api/saveGameBoard"; + +export const global = { stop: false }; dotenv.config(); const app = express(); @@ -25,6 +28,7 @@ app.get("/startPoint", startPoint) app.post("/login", login); app.post("/readyStateToggle", readyStateToggle); app.post("/getCurrentGameState", getCurrentGameState); +app.post("/saveGameBoard", saveGameBoard); app.listen(PORT, () => { diff --git a/backend/ts/startGame.ts b/backend/ts/startGame.ts index 4188d29..eb19bc0 100644 --- a/backend/ts/startGame.ts +++ b/backend/ts/startGame.ts @@ -1,41 +1,16 @@ import { } from "../../helpers/helpers"; -import { makeQuery, Color, GameBoard, Chequer, Coordinates, Data } from "../../helpers/helpersBack"; -import { Request, Response } from "express"; +import { makeQuery, nextTurnEndsAt, Color, GameBoard, Chequer, Coordinates, Data, getData, HomesOrBases, Square, tColors } from "../../helpers/helpersBack"; -export default async function startGame(req: Request, res: Response) { - if (req.session === undefined) { - res.status(500); - res.send(""); - return; - } - - makeQuery("UPDATE `fia` SET `started` = 1 WHERE `id`= ?", [req.session.gid]); - let dbRes: {gameBoard: GameBoard, data: Data} - = (await makeQuery("SELECT `gameBoard`, `playersCount` FROM `fia` WHERE `id` = ?", [req.session.gid]))[0]; +export default async function startGame(gid: number) { + let dbRes: {gameBoard: GameBoard, data: Data} = + (await makeQuery("SELECT `gameBoard`, `data` FROM `fia` WHERE `id` = ?", [gid]))[0]; for (let player of dbRes.data) { - let chequer: Chequer = { color: player.color, x: 1, y: 1 }, - start: Coordinates; - - switch (player.color) { - case Color.red: start = { x: 1, y: 1 }; break; - case Color.blue: start = { x: 8, y: 1 }; break; - case Color.yellow: start = { x: 1, y: 8 }; break; - default /* Color.green */: start = { x: 8, y: 8 }; break; - // case Color.green: start = { x: 8, y: 8 }; break; + for(let square of dbRes.gameBoard.bases[player.color as keyof HomesOrBases]) { + square.chequer = player.color; } - - for (let i = 0; i < 2; i++) { - for (let j = 0; j < 2; j++) { - //@ts-ignore - 8 + 1 <= 11 which is max of Coordinates - [chequer.x, chequer.y] = [start.x + i, start.y + j]; - } - } - - dbRes.gameBoard.push(chequer); } - await makeQuery("UPDATE `fia` SET `gameBoard` = ? WHERE `id`= ?", [dbRes.gameBoard, req.session.gid]); - - res.send(""); + await makeQuery("UPDATE `fia` SET `gameBoard` = ?, `started` = 1, `timeTillTurnEnd` = ? WHERE `id`= ?", + [dbRes.gameBoard, nextTurnEndsAt(), gid]); }
\ No newline at end of file |
