import { defineStore } from "pinia"; import { io, type Socket } from "socket.io-client"; import { useNotificationStore } from "../../notification"; import { url } from "../../../serverCom"; export const useConnectionStore = defineStore("connection", { state: () => { return { connection: undefined as undefined | Socket, }; }, getters: { connectionStatus: (state) => !!state.connection, }, actions: { connectClient(): void { if (this.connectionStatus) return; const notificationStore = useNotificationStore(); this.connection?.disconnect(); this.connection = io(url, { reconnection: true, reconnectionDelayMax: 10000, auth: { token: localStorage.getItem("accessToken"), }, }); this.connection.on("connect", () => { notificationStore.push("Erfolg", `Verbindung aufgebaut`, "success"); }); this.connection.on("connect_error", () => { notificationStore.push("Fehler", `Verbindung fehlgeschlagen`, "error"); }); this.connection.on("disconnecting", () => { this.connection?.disconnect(); }); this.connection.on("disconnect", () => { this.$reset(); }); this.connection.on("warning", (msg: string) => { notificationStore.push("Warnung", msg, "warning"); }); this.connection.on("error", (msg: string) => { notificationStore.push("Fehler", msg, "error"); }); this.connection.on("reconnect", (attemptNumber) => { notificationStore.push("Reconnect", `Reconnect erfolgreich`, "success"); }); this.connection.on("reconnect_attempt", (attemptNumber) => { notificationStore.push("Reconnect-Versuch", `Reconnect-Versuch Nr.${attemptNumber}`, "info"); }); this.connection.on("reconnect_error", (error) => { notificationStore.push("Warnung", "Reconnect fehlgeschlagen", "warning"); }); this.connection.on("reconnect_failed", () => { notificationStore.push("Fehler", "Reconnect-Versuche erfolglos beendet", "error"); }); }, disconnectClient(): void { this.connection?.disconnect(); }, }, });