aboutsummaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
authorMaks Jopek <maksymilian.jopek@prym-soft.pl>2021-04-18 00:03:32 +0200
committerMaks Jopek <maksymilian.jopek@prym-soft.pl>2021-04-18 00:03:32 +0200
commitc3c3b770b037cb80a37b3508ac890699d7391083 (patch)
tree4d82e69aaba488f1a6aecf7ada4ce1747e9ca307 /backend
parentdd66b8ad239d5ceae219746a702963645259b784 (diff)
downloadfia-c3c3b770b037cb80a37b3508ac890699d7391083.tar.gz
fia-c3c3b770b037cb80a37b3508ac890699d7391083.tar.zst
fia-c3c3b770b037cb80a37b3508ac890699d7391083.zip
Everything till generating empty game board
Diffstat (limited to 'backend')
-rw-r--r--backend/ts/api/getCurrentGameState.ts16
-rw-r--r--backend/ts/api/login.ts48
-rw-r--r--backend/ts/api/readyStateToggle.ts18
-rw-r--r--backend/ts/api/startPoint.ts8
-rw-r--r--backend/ts/index.ts2
-rw-r--r--backend/ts/startGame.ts41
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