diff options
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/ts/api/getCurrentGameState.ts | 16 | ||||
| -rw-r--r-- | backend/ts/api/login.ts | 48 | ||||
| -rw-r--r-- | backend/ts/api/readyStateToggle.ts | 18 | ||||
| -rw-r--r-- | backend/ts/api/startPoint.ts | 8 | ||||
| -rw-r--r-- | backend/ts/index.ts | 2 | ||||
| -rw-r--r-- | backend/ts/startGame.ts | 41 |
6 files changed, 109 insertions, 24 deletions
diff --git a/backend/ts/api/getCurrentGameState.ts b/backend/ts/api/getCurrentGameState.ts new file mode 100644 index 0000000..7efa009 --- /dev/null +++ b/backend/ts/api/getCurrentGameState.ts @@ -0,0 +1,16 @@ +import { Request, Response } from "express"; +import { Data, makeQuery } 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(""); + 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; + + 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 d5393ef..0c6ef75 100644 --- a/backend/ts/api/login.ts +++ b/backend/ts/api/login.ts @@ -1,10 +1,11 @@ import { Request, Response } from "express"; -import { makeQuery, fiaTable, dbRes, dbResToFiaTable, Color, Colors } from "../../../helpers/helpers"; +import { fiaTable, dbRes, Color, Colors, Helpers, makeQuery, Chequer, tColors } from "../../../helpers/helpersBack"; +import startGame from "../startGame"; -// export default async function apiLogin(req: Request, res: Response) { -export default async function (req: Request, res: Response) { +export default async function apiLogin(req: Request, res: Response) { if (req.session === undefined) { - res.send(/* html */ `<script>alert("Something went wrong, try to reload the page")</script>`); + res.status(500); + res.send(""); return; } req.session.uid = req.session.id; @@ -13,30 +14,47 @@ export default async function (req: Request, res: Response) { let dbRes = (await makeQuery("SELECT * FROM `fia` WHERE `started`= 0 LIMIT 1", [])) as Array<dbRes>, row: fiaTable; if (dbRes.length === 0) { + let color = Helpers.getRandomInt(0, 5); row = {} as fiaTable; - row.data = [{ id: req.session.uid, color: Color.blue, name: req.body.name }]; + + row.data = [{ + id: req.session.uid, + index: 0, + color: Color[color as keyof Colors], + name: req.body.name, + }]; req.session.color = Color.blue; 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; + req.session.gid = (await makeQuery('SELECT `id` FROM `fia` WHERE `data`= ?', [JSON.stringify(row.data)]) as any)[0].id; } else { - row = dbResToFiaTable(dbRes[0]); - let color = Color[row.data.length as keyof Colors]; + row = Helpers.dbResToFiaTable(dbRes[0]); + let playersColors: Array<tColors> = [], + colors = [...Array(4).keys()]; + + for (let playerData of row.data) + playersColors.push(playerData.color); + + colors = colors.filter(el => !playersColors.includes(el)); + let color = colors[Helpers.getRandomInt(0, colors.length)], + index = row.data.length; + row.data.push({ id: req.session.uid, - color: Color.blue, - name: req.body.name + index: index, + color: color, + name: req.body.name, }); req.session.gid = row.id; - req.session.color = color; - makeQuery('UPDATE `fia` SET `data`=? WHERE `id`=?', [JSON.stringify(row.data), row.id]); + req.session.index = index; + + makeQuery('UPDATE `fia` SET `data`= ? WHERE `id`= ?', [JSON.stringify(row.data), row.id]); if (row.data.length === 4) { - makeQuery("UPDATE `fia` SET `started` = 1 WHERE `id`=?", [row.id]); - // TODO: Start game from backend + startGame(req, res); } } - makeQuery("UPDATE `fia` SET `playersCount`=`playersCount`+1 WHERE `id`=?", [req.session.gid]); + makeQuery("UPDATE `fia` SET `playersCount`=`playersCount`+1 WHERE `id`= ?", [req.session.gid]); res.send(JSON.stringify(row.data)); } diff --git a/backend/ts/api/readyStateToggle.ts b/backend/ts/api/readyStateToggle.ts index f6269bc..6bca5b2 100644 --- a/backend/ts/api/readyStateToggle.ts +++ b/backend/ts/api/readyStateToggle.ts @@ -1,11 +1,19 @@ import { Request, Response } from "express"; -import { makeQuery, checkApiRes } from "../../../helpers/helpers"; +import { makeQuery } from "../../../helpers/helpersBack"; +import startGame from "../startGame"; export default async function (req: Request, res: Response) { - if (req.session === undefined || req.body.state == undefined) { - res.send(/* html */ `<script>alert("Something went wrong, try to reload the page")</script>`); + if (req.session === undefined || req.body.state === undefined) { + res.status(500); + res.send(""); return; } - makeQuery("UPDATE `fia` SET `playersAreReady`=`playersAreReady`+" + (req.body.state ? 1 : 0) - + " WHERE `id`=" + req.session.gid, []).then(dbRes => checkApiRes(dbRes, res)); + 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); } diff --git a/backend/ts/api/startPoint.ts b/backend/ts/api/startPoint.ts index 0fa79e5..d635622 100644 --- a/backend/ts/api/startPoint.ts +++ b/backend/ts/api/startPoint.ts @@ -1,20 +1,20 @@ import { Request, Response } from "express"; -import { makeQuery } from "../../../helpers/helpers"; +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); + // 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]); - console.log("data: ", data); res.send(JSON.stringify({ status: true, data: data })) } - else + else { res.send(JSON.stringify({ status: false })); + } }
\ No newline at end of file diff --git a/backend/ts/index.ts b/backend/ts/index.ts index 6b12571..d0899dd 100644 --- a/backend/ts/index.ts +++ b/backend/ts/index.ts @@ -5,6 +5,7 @@ import * as dotenv from "dotenv"; import login from "./api/login"; import startPoint from "./api/startPoint"; import readyStateToggle from "./api/readyStateToggle"; +import getCurrentGameState from "./api/getCurrentGameState"; dotenv.config(); const app = express(); @@ -23,6 +24,7 @@ app.get("/startPoint", startPoint) app.post("/login", login); app.post("/readyStateToggle", readyStateToggle); +app.post("/getCurrentGameState", getCurrentGameState); app.listen(PORT, () => { diff --git a/backend/ts/startGame.ts b/backend/ts/startGame.ts new file mode 100644 index 0000000..4188d29 --- /dev/null +++ b/backend/ts/startGame.ts @@ -0,0 +1,41 @@ +import { } from "../../helpers/helpers"; +import { makeQuery, Color, GameBoard, Chequer, Coordinates, Data } from "../../helpers/helpersBack"; +import { Request, Response } from "express"; + +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]; + + 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 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(""); +}
\ No newline at end of file |
