import { defineStore } from "pinia"; import { subscribe } from "~/netcode"; import { GameResponseDTO } from "~/netcode/events/dto/gameresponse.dto"; import { handlers } from "~/netcode/handlers/game.handler"; export const useGameStore = defineStore("game", { state: () => ({ game: null as null | GameResponseDTO, eventSource: null as null | EventSource, }), actions: { async subscribe(id: number) { this.eventSource = subscribe(`/games/${id}/subscribe`); this.eventSource.addEventListener("message", async (message) => { const data = JSON.parse(message.data); const type = data.type as string; if (type in handlers) { handlers[type as keyof typeof handlers](data); } }); }, async close() { this.eventSource?.close(); }, async fetchGame(id: number) { const config = useRuntimeConfig(); const data = await useFetch( config.public.endpoint + `/games/` + id, { credentials: "include", immediate: true, } ); if (data.data.value) { this.game = data.data.value; } return data.data; }, }, });