From 292257d627bd1dfeafd772ac6457e2f54c2b73ba Mon Sep 17 00:00:00 2001 From: Maks Jopek Date: Sun, 4 Apr 2021 01:53:24 +0200 Subject: One step closer to the end --- backend/ts/api/login.ts | 49 +++++++++++++++++++++++++++++++++++++++++++ backend/ts/helpers.ts | 18 ++++++++++++++++ backend/ts/index.ts | 22 +++++++++++++++++++ backend/tsconfig.json | 9 ++++++++ frontend/ts/login.ts | 26 +++++++++++++++++++++++ frontend/ts/startGame.ts | 27 ++++++++++++++++++++++++ frontend/tsconfig.json | 13 ++++++++++++ package.json | 8 ++++--- public/map.html | 43 ++++++++++++++++++++++++++++++++++++++ src/backend/ts/api/login.ts | 19 ----------------- src/backend/ts/index.ts | 15 ------------- src/backend/tsconfig.json | 9 -------- src/frontend/ts/login.ts | 12 ----------- src/frontend/tsconfig.json | 12 ----------- yarn.lock | 51 ++++++++++++++++++++++++++++++++++++++++++++- 15 files changed, 262 insertions(+), 71 deletions(-) create mode 100644 backend/ts/api/login.ts create mode 100644 backend/ts/helpers.ts create mode 100644 backend/ts/index.ts create mode 100644 backend/tsconfig.json create mode 100644 frontend/ts/login.ts create mode 100644 frontend/ts/startGame.ts create mode 100644 frontend/tsconfig.json create mode 100644 public/map.html delete mode 100644 src/backend/ts/api/login.ts delete mode 100644 src/backend/ts/index.ts delete mode 100644 src/backend/tsconfig.json delete mode 100644 src/frontend/ts/login.ts delete mode 100644 src/frontend/tsconfig.json diff --git a/backend/ts/api/login.ts b/backend/ts/api/login.ts new file mode 100644 index 0000000..5b38c62 --- /dev/null +++ b/backend/ts/api/login.ts @@ -0,0 +1,49 @@ +import { Request, Response } from "express"; +import { makeQuery } from "../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; + 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) { + if (req.session === undefined) { + res.send(/* html */``); + return; + } + req.session.uid = req.session.id; + let c = await makeQuery("SELECT * FROM `fia` WHERE `started`= false LIMIT 1", []), + 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()]); + } + res.send("[1, 2, 3]"); +} diff --git a/backend/ts/helpers.ts b/backend/ts/helpers.ts new file mode 100644 index 0000000..984ce2d --- /dev/null +++ b/backend/ts/helpers.ts @@ -0,0 +1,18 @@ +import fetch from "node-fetch"; + +export async function makeQuery (query: string, params: Array): Promise { + return await ( + await fetch("https://jopek.eu/maks/szkola/apkKli/fiaFiles/fia.php", { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json" + }, + body: JSON.stringify({ + apiKey: process.env.API_KEY, + stmt: query, + params: params + }) + }) + ).text(); +} \ No newline at end of file diff --git a/backend/ts/index.ts b/backend/ts/index.ts new file mode 100644 index 0000000..fd8f8e1 --- /dev/null +++ b/backend/ts/index.ts @@ -0,0 +1,22 @@ +import express from "express"; +import login from "./api/login"; +import session from "express-session"; +import * as dotenv from "dotenv"; + +dotenv.config(); +const app = express(); +const PORT = 8000; + +if (!process.env.SESSION_KEY) + throw Error("SESSION_KEY is undefined"); + +app.use(session({ secret: process.env.SESSION_KEY, cookie: { maxAge: 60000 } })) +app.use("/", express.static("./public")); + +app.get("/favicon.ico", (req, res) => res.redirect("https://lukesmith.xyz/favicon.ico")); +app.get("/blank", (req, res) => res.send("")); +app.post("/login", (req, res, next) => login(req, res)); + +app.listen(PORT, () => { + console.log(`[server]: Server is running at https://localhost:${PORT}`); +}); diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 0000000..bb9a7dd --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "include": [ + "ts/**/*" + ], + "compilerOptions": { + "outDir": "./js" + } +} \ No newline at end of file diff --git a/frontend/ts/login.ts b/frontend/ts/login.ts new file mode 100644 index 0000000..4ef46ab --- /dev/null +++ b/frontend/ts/login.ts @@ -0,0 +1,26 @@ +import startGame from "./startGame.js"; + +let html = /* html */ ` +
+ + + +
+`; + +async function login() { + let username = document.getElementsByTagName("input")[0].innerHTML, + res = await fetch("/login", { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json" + }, + body: JSON.stringify({ username: username }) + }); + res = await res.json(); + startGame(res); +} + +document.body.innerHTML = html; +document.getElementsByTagName("button")[0].onclick = login; diff --git a/frontend/ts/startGame.ts b/frontend/ts/startGame.ts new file mode 100644 index 0000000..50ef068 --- /dev/null +++ b/frontend/ts/startGame.ts @@ -0,0 +1,27 @@ +function getCanvasAndCtx(): [HTMLCanvasElement, CanvasRenderingContext2D] { + let canvas = document.getElementsByTagName("canvas")[0], + ctx = canvas.getContext("2d"); + if (ctx === null) { + document.write("ur muther is fat, stop using IE"); + throw new Error("PLayer is using browser older that his mom"); + } else return [canvas, ctx]; +} +function setOpponents(data: object, body: string) { + let a = [ + { + id: 1, + color: "red", + } + ] + document.body.innerHTML = body; +} +export default async function startGame (data: object) { + let body = await (await fetch("/map.html")).text(); + setOpponents(data, body); + let [canvas, ctx] = getCanvasAndCtx(); + let img = new Image(600, 600); + img.width = 600; + img.height = 600; + img.src = "https://www.egierki.pl/app/uploads/2020/05/Ludo-Play.jpg"; + img.onload = () => ctx.drawImage(img, 0, 0); +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..0d131bd --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "module": "ES2020", + "lib": [ + "DOM" + ], + "outDir": "../public/js" + }, + "include": [ + "ts/**/*" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 82eb636..920f7f1 100644 --- a/package.json +++ b/package.json @@ -7,20 +7,22 @@ "main": "./src/backend/js/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "start:build-front": "tsc -p ./src/frontend/tsconfig.json --watch", - "start:build-back": "tsc -p ./src/backend/tsconfig.json --watch", - "start:run": "nodemon ./src/backend/js/index.js", + "start:build-front": "tsc -p ./frontend/tsconfig.json --watch", + "start:build-back": "tsc -p ./backend/tsconfig.json --watch", + "start:run": "nodemon ./backend/js/index.js", "start": "concurrently \"yarn:start:*\"" }, "dependencies": { "dotenv": "^8.2.0", "express": "^4.17.1", + "express-session": "^1.17.1", "node-fetch": "^2.6.1" }, "devDependencies": { "@types/concurrently": "^6.0.1", "@types/dotenv": "^8.2.0", "@types/express": "^4.17.11", + "@types/express-session": "1.17.0", "@types/node-fetch": "^2.5.8", "@types/nodemon": "^1.19.0", "concurrently": "^6.0.0", diff --git a/public/map.html b/public/map.html new file mode 100644 index 0000000..d38a015 --- /dev/null +++ b/public/map.html @@ -0,0 +1,43 @@ +
+ + + + + + + + + + + + + + +
+ {{ player.name }} + + {{ player.name }} + + {{ player.name }} + + {{ player.name }} + +
+ + +
+
+
+ + Din webbläsare stöder inte canvas, vilket betyder att du inte kan spela + fia +
+
+ \ No newline at end of file diff --git a/src/backend/ts/api/login.ts b/src/backend/ts/api/login.ts deleted file mode 100644 index 045f408..0000000 --- a/src/backend/ts/api/login.ts +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -import { Request, Response } from 'express'; -import fetch from "node-fetch"; -export default async function apiLogin(req: Request, res: Response) { - let response = await fetch("https://jopek.eu/maks/szkola/apkKli/fiaFiles/fia.php", { - method: "POST", - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - apiKey: process.env.API_KEY, - stmt: "SELECT `data` FROM `fia` WHERE `started`= ?", - params: [false] - }), - }); - let resText = await response.text() - res.send(resText); -} \ No newline at end of file diff --git a/src/backend/ts/index.ts b/src/backend/ts/index.ts deleted file mode 100644 index a6dab5b..0000000 --- a/src/backend/ts/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import express from 'express'; -import login from './api/login'; -import * as dotenv from 'dotenv'; - -dotenv.config(); -const app = express(); -const PORT = 8000; - -app.use("/", express.static("./public")); - -app.get('/login', (req, res) => login(req, res)); - -app.listen(PORT, () => { - console.log(`[server]: Server is running at https://localhost:${PORT}`); -}); \ No newline at end of file diff --git a/src/backend/tsconfig.json b/src/backend/tsconfig.json deleted file mode 100644 index 760fd4c..0000000 --- a/src/backend/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": [ - "ts/**/*" - ], - "compilerOptions": { - "outDir": "./js" - } -} \ No newline at end of file diff --git a/src/frontend/ts/login.ts b/src/frontend/ts/login.ts deleted file mode 100644 index 6ff53cd..0000000 --- a/src/frontend/ts/login.ts +++ /dev/null @@ -1,12 +0,0 @@ -let html = /* html */` -
- - - -
-`; -document.body.innerHTML = html; - -function login() { - -} \ No newline at end of file diff --git a/src/frontend/tsconfig.json b/src/frontend/tsconfig.json deleted file mode 100644 index b0975f3..0000000 --- a/src/frontend/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "lib": [ - "DOM" - ], - "outDir": "../../public/js" - }, - "include": [ - "ts/**/*" - ] -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b2a0d68..97092a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -73,7 +73,15 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@^4.17.11": +"@types/express-session@1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@types/express-session/-/express-session-1.17.0.tgz#770daf81368f6278e3e40dd894e1e52abbdca0cd" + integrity sha512-OQEHeBFE1UhChVIBhRh9qElHUvTp4BzKKHxMDkGHT7WuYk5eL93hPG7D8YAIkoBSbhNEY0RjreF15zn+U0eLjA== + dependencies: + "@types/express" "*" + "@types/node" "*" + +"@types/express@*", "@types/express@^4.17.11": version "4.17.11" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== @@ -473,6 +481,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -554,6 +567,20 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +express-session@^1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.1.tgz#36ecbc7034566d38c8509885c044d461c11bf357" + integrity sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q== + dependencies: + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~2.0.0" + on-headers "~1.0.2" + parseurl "~1.3.3" + safe-buffer "5.2.0" + uid-safe "~2.1.5" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -1061,6 +1088,11 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1151,6 +1183,11 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs= + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -1239,6 +1276,11 @@ safe-buffer@5.1.2: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -1463,6 +1505,13 @@ typescript@^4.2.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== +uid-safe@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== + dependencies: + random-bytes "~1.0.0" + undefsafe@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" -- cgit v1.3.1