remove game from activeGames immediately on end
This commit is contained in:
@@ -22,7 +22,15 @@ export const metadata = {
|
|||||||
follow: false,
|
follow: false,
|
||||||
nocache: true,
|
nocache: true,
|
||||||
noarchive: true
|
noarchive: true
|
||||||
}
|
},
|
||||||
|
icons: {
|
||||||
|
icon: [
|
||||||
|
{ type: "image/png", sizes: "32x32", url: "/favicon-32x32.png" },
|
||||||
|
{ type: "image/png", sizes: "16x16", url: "/favicon-16x16.png" }
|
||||||
|
],
|
||||||
|
apple: { url: "/apple-touch-icon.png", sizes: "180x180" }
|
||||||
|
},
|
||||||
|
manifest: "/site.webmanifest"
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
import { IconUser } from "@tabler/icons-react";
|
import { IconUser } from "@tabler/icons-react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import ThemeToggle from "./ThemeToggle";
|
import ThemeToggle from "./ThemeToggle";
|
||||||
|
import Image from "next/image";
|
||||||
|
import icon from "../../public/images/chessu_icon.svg";
|
||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
return (
|
return (
|
||||||
<header className="navbar mx-1 w-auto justify-center drop-shadow-sm md:mx-16 lg:mx-40">
|
<header className="navbar mx-1 w-auto justify-center drop-shadow-sm md:mx-16 lg:mx-40">
|
||||||
<div className="flex flex-1 items-center gap-1">
|
<div className="flex flex-1 items-center gap-2">
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/"
|
||||||
className="btn btn-ghost no-animation p-0 text-xl normal-case hover:bg-transparent"
|
className="btn btn-ghost no-animation gap-1 p-0 text-2xl normal-case hover:bg-transparent"
|
||||||
>
|
>
|
||||||
|
<Image src={icon} alt="chessu icon" height={30} />
|
||||||
chessu
|
chessu
|
||||||
</Link>
|
</Link>
|
||||||
<div className="dropdown dropdown-right hover:dropdown-open">
|
<div className="dropdown dropdown-right hover:dropdown-open">
|
||||||
|
|||||||
@@ -149,6 +149,9 @@ export async function claimAbandoned(this: Socket, type: "win" | "draw") {
|
|||||||
};
|
};
|
||||||
|
|
||||||
io.to(game.code as string).emit("gameOver", gameOver);
|
io.to(game.code as string).emit("gameOver", gameOver);
|
||||||
|
|
||||||
|
if (game.timeout) clearTimeout(game.timeout);
|
||||||
|
activeGames.splice(activeGames.indexOf(game), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getLatestGame(this: Socket) {
|
export async function getLatestGame(this: Socket) {
|
||||||
@@ -205,6 +208,9 @@ export async function sendMove(this: Socket, m: { from: string; to: string; prom
|
|||||||
const { id } = (await GameModel.save(game)) as Game; // save game to db
|
const { id } = (await GameModel.save(game)) as Game; // save game to db
|
||||||
game.id = id;
|
game.id = id;
|
||||||
io.to(game.code as string).emit("gameOver", { reason, winnerName, winnerSide, id });
|
io.to(game.code as string).emit("gameOver", { reason, winnerName, winnerSide, id });
|
||||||
|
|
||||||
|
if (game.timeout) clearTimeout(game.timeout);
|
||||||
|
activeGames.splice(activeGames.indexOf(game), 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error("invalid move");
|
throw new Error("invalid move");
|
||||||
|
|||||||
Reference in New Issue
Block a user