diff options
| author | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-04-10 01:06:09 +0200 |
|---|---|---|
| committer | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-04-10 01:06:09 +0200 |
| commit | dd66b8ad239d5ceae219746a702963645259b784 (patch) | |
| tree | 47462463911a018a31cd1ede3d8206fd96032b99 /backend/ts | |
| parent | d928eab3ecefbf778f1cadece9beac010dc42332 (diff) | |
| download | fia-dd66b8ad239d5ceae219746a702963645259b784.tar.gz fia-dd66b8ad239d5ceae219746a702963645259b784.tar.zst fia-dd66b8ad239d5ceae219746a702963645259b784.zip | |
Added joining rooms and logic to start game by votes
Diffstat (limited to 'backend/ts')
| -rw-r--r-- | backend/ts/api/login.ts | 73 | ||||
| -rw-r--r-- | backend/ts/api/readyStateToggle.ts | 11 | ||||
| -rw-r--r-- | backend/ts/api/startPoint.ts | 20 | ||||
| -rw-r--r-- | backend/ts/index.ts | 25 |
4 files changed, 79 insertions, 50 deletions
diff --git a/backend/ts/api/login.ts b/backend/ts/api/login.ts index 5b38c62..d5393ef 100644 --- a/backend/ts/api/login.ts +++ b/backend/ts/api/login.ts @@ -1,49 +1,42 @@ import { Request, Response } from "express"; -import { makeQuery } from "../helpers"; +import { makeQuery, fiaTable, dbRes, dbResToFiaTable, Color, Colors } from "../../../helpers/helpers"; -interface Colors { - blue: number; - red: number; - green: number; - yellow: number; - 0: number; - 1: number; - 2: number; - 3: number; -} - -interface fiaTable { - id: number; - data: Array<object>; - started: boolean; -} - -const Color: Colors = { - blue: 0, - red: 1, - green: 2, - yellow: 3, - 0: 0, 1: 1, 2: 2, 3: 3 -} - -export default async function apiLogin(req: Request, res: Response) { +// export default async function apiLogin(req: Request, res: Response) { +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>`); + res.send(/* html */ `<script>alert("Something went wrong, try to reload the page")</script>`); return; } req.session.uid = req.session.id; - let c = await makeQuery("SELECT * FROM `fia` WHERE `started`= false LIMIT 1", []), + req.session.name = req.body.name; + + let dbRes = (await makeQuery("SELECT * FROM `fia` WHERE `started`= 0 LIMIT 1", [])) as Array<dbRes>, row: fiaTable; - if (c === "") { - let data = { id: req.session.uid, color: Color.blue }; - makeQuery("INSERT INTO `fia`(`data`, `started`) VALUES (?, ?)", [JSON.stringify(data), "0"]); - } - else { - row = JSON.parse(c); - row.data.push({ id: req.session.uid, color: Color[row.data.length as keyof Colors] }); - makeQuery("UPDATE `fia` SET `data`=? WHERE `id`=?", [JSON.stringify(row.data), row.id.toString()]); - if(row.data.length === 4) - makeQuery("UPDATE `fia` SET `started` = 1 WHERE `id`=?", [row.id.toString()]); + if (dbRes.length === 0) { + row = {} as fiaTable; + row.data = [{ id: req.session.uid, color: Color.blue, 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; + } else { + row = dbResToFiaTable(dbRes[0]); + let color = Color[row.data.length as keyof Colors]; + row.data.push({ + id: req.session.uid, + color: Color.blue, + 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]); + + if (row.data.length === 4) { + makeQuery("UPDATE `fia` SET `started` = 1 WHERE `id`=?", [row.id]); + // TODO: Start game from backend + } } - res.send("[1, 2, 3]"); + 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 new file mode 100644 index 0000000..f6269bc --- /dev/null +++ b/backend/ts/api/readyStateToggle.ts @@ -0,0 +1,11 @@ +import { Request, Response } from "express"; +import { makeQuery, checkApiRes } from "../../../helpers/helpers"; + +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>`); + return; + } + makeQuery("UPDATE `fia` SET `playersAreReady`=`playersAreReady`+" + (req.body.state ? 1 : 0) + + " WHERE `id`=" + req.session.gid, []).then(dbRes => checkApiRes(dbRes, res)); +} diff --git a/backend/ts/api/startPoint.ts b/backend/ts/api/startPoint.ts new file mode 100644 index 0000000..0fa79e5 --- /dev/null +++ b/backend/ts/api/startPoint.ts @@ -0,0 +1,20 @@ +import { Request, Response } from "express"; +import { makeQuery } from "../../../helpers/helpers"; + +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]); + console.log("data: ", data); + res.send(JSON.stringify({ + status: true, + data: data + })) + } + 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 ead29f2..6b12571 100644 --- a/backend/ts/index.ts +++ b/backend/ts/index.ts @@ -1,24 +1,29 @@ import express from "express"; -import login from "./api/login"; import session from "express-session"; import * as dotenv from "dotenv"; +import login from "./api/login"; +import startPoint from "./api/startPoint"; +import readyStateToggle from "./api/readyStateToggle"; + dotenv.config(); const app = express(); const PORT = 8000; -if (!process.env.SESSION_KEY) process.env.SESSION_KEY = "ouh2981w1pjd9"; -// throw Error("SESSION_KEY is undefined"); +if (!process.env.SESSION_KEY) + throw Error("SESSION_KEY is undefined"); -app.use( - session({ secret: process.env.SESSION_KEY, cookie: { maxAge: 60000 } }) -); +app.use(session({ secret: process.env.SESSION_KEY, cookie: { maxAge: 60000 } })); +app.use(express.json()); app.use("/", express.static("./public")); -app.get("/favicon.ico", (req, res) => - res.redirect("https://lukesmith.xyz/favicon.ico") -); -app.post("/login", (req, res) => login(req, res)); +app.get("/favicon.ico", (req, res) => res.redirect("https://lukesmith.xyz/favicon.ico")); + +app.get("/startPoint", startPoint) + +app.post("/login", login); +app.post("/readyStateToggle", readyStateToggle); + app.listen(PORT, () => { console.log(`[server]: Server is running at https://localhost:${PORT}`); |
