updated game performance
This commit is contained in:
parent
6a1b9ef890
commit
9a5ee93c4b
|
|
@ -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({
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
|
|
@ -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({
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue