aboutsummaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/ts/api/getCurrentGameState.ts25
-rw-r--r--backend/ts/api/login.ts46
-rw-r--r--backend/ts/api/readyStateToggle.ts46
-rw-r--r--backend/ts/api/saveGameBoard.ts16
-rw-r--r--backend/ts/api/startPoint.ts12
-rw-r--r--backend/ts/gameBoard.ts99
-rw-r--r--backend/ts/index.ts4
-rw-r--r--backend/ts/startGame.ts41
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