diff --git a/changelog.txt b/changelog.txt index 90ad678..76a876f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1 +1 @@ -New mayor project: TypeWord. Check it out in the projects tab \ No newline at end of file +Make TypeWord room api endpoint \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 869c2dd..f6a38ff 100644 --- a/src/index.ts +++ b/src/index.ts @@ -143,7 +143,7 @@ io.on("connection", async (socket) => { const response = await fetch("https://random-word-api.herokuapp.com/word"); const json = await response.json(); if(response.ok){ - io.emit("typewordstart", {"room": data.room, "word": json[0]}); + io.emit("typewordstart", {"room": data.room, "word": json[0].toLowerCase()}); } else{ io.emit("typewordstart", {"room": data.room, "word": "error"}); @@ -156,7 +156,12 @@ io.on("connection", async (socket) => { socket.on("typewordfinish", (data) => { typeWordRooms[data.room].winner = data.player; - io.emit("typewordwinner", {"room": data.room, "player": data.player}); + io.emit("typewordwinner", {"room": data.room, "player": data.player, "time": data.time}); + }); + + socket.on("typeworddelete", (data) => { + delete typeWordRooms[data.room]; + io.emit("typeworddelete", {"room": data.room}); }); }); diff --git a/src/routes/api/v1/authed.ts b/src/routes/api/v1/authed.ts index f3a389b..e59875d 100644 --- a/src/routes/api/v1/authed.ts +++ b/src/routes/api/v1/authed.ts @@ -2,7 +2,7 @@ import express, { Request, Response, NextFunction } from "express"; const router = express.Router(); import { getClicks, verifyKey } from "../../../functions.js"; import { rooms } from "../../ttt.js"; -import { time } from "console"; +import { typeWordRooms } from "../../typeword.js"; router.use(async (req: Request, res: Response, next: NextFunction) => { const { auth } = req.headers; @@ -38,7 +38,7 @@ router.get("/clicks", async (req: Request, res: Response) => { }); }); -router.get("/rooms", (req: Request, res: Response) => { +router.get("/ttt/rooms", (req: Request, res: Response) => { const { room } = req.query; if(room){ @@ -117,4 +117,31 @@ router.post("/decode", (req: Request, res: Response) => { }); }); +router.get("/typeword/rooms", (req: Request, res: Response) => { + const room = req.query.room; + + if(room){ + if(typeWordRooms[String(room)]){ + res.json({ + room: { + name: typeWordRooms[String(room)].name, + host: typeWordRooms[String(room)].host, + player: typeWordRooms[String(room)].player || "no player", + winner: typeWordRooms[String(room)].winner || "no winner yet" + } + }) + } + else{ + res.status(404).json({ + error: "Room not found" + }) + } + } + else{ + res.status(400).json({ + error: "Missing room" + }) + } +}); + export default router; \ No newline at end of file diff --git a/src/routes/typeword.ts b/src/routes/typeword.ts index a53ebbe..ff32438 100644 --- a/src/routes/typeword.ts +++ b/src/routes/typeword.ts @@ -47,9 +47,14 @@ router.post("/join", async (req: Request, res: Response) => { if(username && room){ if(await verify(req)){ if(typeWordRooms[room]){ - typeWordRooms[room].player = username; - io.emit("typewordjoin", {"room": room, "username": username}); - res.render("projects/typeword/game", { room: room, user: username, host: typeWordRooms[room].host, player: username }); + if(username != typeWordRooms[room].host){ + typeWordRooms[room].player = username; + io.emit("typewordjoin", {"room": room, "username": username}); + res.render("projects/typeword/game", { room: room, user: username, host: typeWordRooms[room].host, player: username }); + } + else{ + res.render("error", { error: "Username cannot be the host's username" }); + } } else{ res.status(404).render("error", { error: "Room doesn't exists" }) diff --git a/views/projects/typeword/game.ejs b/views/projects/typeword/game.ejs index 61b0c9d..5c39d63 100644 --- a/views/projects/typeword/game.ejs +++ b/views/projects/typeword/game.ejs @@ -16,18 +16,21 @@
Word:
- +Time: 0s
+Controls (host only):
+