updated game performance

This commit is contained in:
MasterGordon 2024-10-27 19:02:07 +01:00
parent 6a1b9ef890
commit 9a5ee93c4b
3 changed files with 15 additions and 5 deletions

View File

@ -18,13 +18,16 @@ import { pickRandom } from "../../shared/utils";
import { addGems } from "../repositories/gemsRepository"; import { addGems } from "../repositories/gemsRepository";
import { getCollection } from "../repositories/collectionRepository"; import { getCollection } from "../repositories/collectionRepository";
const safeGameState = (gameState: ServerGame) => {
return gameState.finished ? gameState : serverToClientGame(gameState);
};
export const gameController = createController({ export const gameController = createController({
getGameState: createEndpoint(z.string(), async (uuid, ctx) => { getGameState: createEndpoint(z.string(), async (uuid, ctx) => {
const game = await getGame(ctx.db, uuid); const game = await getGame(ctx.db, uuid);
const parsed = parseGameState(game.gameState); const parsed = parseGameState(game.gameState);
const gameState = await serverGame.parseAsync(parsed); const gameState = await serverGame.parseAsync(parsed);
if (game.finished) return gameState; return safeGameState(gameState);
return serverToClientGame(gameState);
}), }),
createGame: createEndpoint(z.null(), async (_, { user, db }) => { createGame: createEndpoint(z.null(), async (_, { user, db }) => {
if (!user) throw new UnauthorizedError("Unauthorized"); if (!user) throw new UnauthorizedError("Unauthorized");
@ -63,6 +66,7 @@ export const gameController = createController({
emit({ emit({
type: "updateGame", type: "updateGame",
game: dbGame.uuid, game: dbGame.uuid,
gameState: safeGameState(serverGame),
}); });
if (ts === 0 && serverGame.finished !== 0) { if (ts === 0 && serverGame.finished !== 0) {
emit({ emit({
@ -96,6 +100,7 @@ export const gameController = createController({
emit({ emit({
type: "updateGame", type: "updateGame",
game: dbGame.uuid, game: dbGame.uuid,
gameState: safeGameState(serverGame),
}); });
if (ts === 0 && serverGame.finished !== 0) { if (ts === 0 && serverGame.finished !== 0) {
emit({ emit({
@ -128,6 +133,7 @@ export const gameController = createController({
emit({ emit({
type: "updateGame", type: "updateGame",
game: dbGame.uuid, game: dbGame.uuid,
gameState: safeGameState(serverGame),
}); });
}, },
), ),
@ -143,6 +149,7 @@ export const gameController = createController({
emit({ emit({
type: "updateGame", type: "updateGame",
game: dbGame.uuid, game: dbGame.uuid,
gameState: safeGameState(serverGame),
}); });
if (ts === 0 && serverGame.finished !== 0) { if (ts === 0 && serverGame.finished !== 0) {
emit({ emit({

View File

@ -1,4 +1,5 @@
import type { Rarity } from "../shared/lootboxes"; import type { Rarity } from "../shared/lootboxes";
import { ClientGame, ServerGame } from "./gameType";
export type EventType = "new" | "finished" | "updateGame" | "updateStage"; export type EventType = "new" | "finished" | "updateGame" | "updateStage";
export type Events = export type Events =
@ -15,6 +16,7 @@ export type Events =
| { | {
type: "updateGame"; type: "updateGame";
game: string; game: string;
gameState: ServerGame | ClientGame;
} }
| { | {
type: "updateStage"; type: "updateStage";

View File

@ -64,9 +64,10 @@ const createWSClient = () => {
addMessageListener((event: MessageEvent) => { addMessageListener((event: MessageEvent) => {
const data = JSON.parse(event.data) as Events; const data = JSON.parse(event.data) as Events;
if (data.type === "updateGame") { if (data.type === "updateGame") {
queryClient.refetchQueries({ queryClient.setQueryData(
queryKey: ["game.getGameState", data.game], ["game.getGameState", data.game],
}); data.gameState,
);
} }
if (data.type === "loss") { if (data.type === "loss") {
queryClient.invalidateQueries({ queryClient.invalidateQueries({