From 5857c7e0d4d920c2df7cd09bbc1d3f7415eb46b9 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Thu, 27 Feb 2025 15:08:56 +0100 Subject: [PATCH] intermediate: sync --- src/stores/admin/operation/connection.ts | 8 +++- src/stores/admin/operation/missionDetail.ts | 44 ++++++++++--------- .../admin/operation/mission/MissionDetail.vue | 25 +++++------ .../operation/mission/MissionOverview.vue | 2 +- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/src/stores/admin/operation/connection.ts b/src/stores/admin/operation/connection.ts index 180b803..ab38096 100644 --- a/src/stores/admin/operation/connection.ts +++ b/src/stores/admin/operation/connection.ts @@ -7,10 +7,11 @@ export const useConnectionStore = defineStore("connection", { state: () => { return { connection: undefined as undefined | Socket, + connected: false as boolean, }; }, getters: { - connectionStatus: (state) => !!state.connection, + connectionStatus: (state) => state.connected, }, actions: { connectClient(): void { @@ -27,16 +28,21 @@ export const useConnectionStore = defineStore("connection", { }); this.connection.on("connect", () => { + this.connected = true; notificationStore.push("Socket-Erfolg", `Verbindung aufgebaut`, "success"); }); this.connection.on("connect_error", (err) => { + this.connected = false; this.handleError(err, true); }); this.connection.on("disconnecting", () => { + this.connected = false; this.connection?.disconnect(); }); this.connection.on("disconnect", () => { + this.connected = false; this.$reset(); + this.connectClient(); }); this.connection.on("warning", (msg: string) => { notificationStore.push("Socket-Warnung", msg, "warning"); diff --git a/src/stores/admin/operation/missionDetail.ts b/src/stores/admin/operation/missionDetail.ts index 7ababf6..c814b4a 100644 --- a/src/stores/admin/operation/missionDetail.ts +++ b/src/stores/admin/operation/missionDetail.ts @@ -6,12 +6,11 @@ import { computed, ref } from "vue"; export const useMissionDetailStore = defineStore("missionDetail", () => { const connectionStore = useConnectionStore(); + const initialized = ref(false); const ydoc = ref(new Y.Doc()); const awareness = ref(new Awareness(ydoc.value)); - const editor = ref(ydoc.value.getText("editor")); - const title = computed({ get() { return ydoc.value.getMap("form").get("title") ?? ""; @@ -20,30 +19,35 @@ export const useMissionDetailStore = defineStore("missionDetail", () => { ydoc.value.getMap("form").set("title", val); }, }); + const editor = ref(ydoc.value.getText("editor")); function init(missionId: string) { - connectionStore.connection?.on("package-sync", (update) => { - Y.applyUpdate(ydoc.value, new Uint8Array(update)); - }); - - connectionStore.connection?.on("package-mission", (initial) => { - Y.applyUpdate(ydoc.value, new Uint8Array(initial)); - }); - - connectionStore.connection?.emit("mission:join", missionId); - } - function destroy() { - connectionStore?.connection?.emit("mission:leave"); + if (!connectionStore.connection) return; ydoc.value = new Y.Doc(); awareness.value = new Awareness(ydoc.value); editor.value = ydoc.value.getText("editor"); + ydoc.value.on("update", (update) => { + connectionStore.connection?.emit("mission:sync", Array.from(update)); + }); + + connectionStore.connection.on("package-sync", (update) => { + Y.applyUpdate(ydoc.value, new Uint8Array(update)); + }); + + connectionStore.connection.on("package-mission", (initial) => { + Y.applyUpdate(ydoc.value, new Uint8Array(initial)); + }); + + connectionStore.connection.emit("mission:join", missionId, initialized.value); + initialized.value = true; + } + function destroy() { + connectionStore.connection?.emit("mission:leave"); + + connectionStore.connection?.off("package-mission"); + connectionStore.connection?.off("package-sync"); } - ydoc.value.on("update", (update) => { - console.log(connectionStore.connection); - connectionStore.connection?.emit("mission:sync", Array.from(update)); - }); - - return { ydoc, awareness, editor, title, init, destroy }; + return { ydoc, awareness, title, editor, init, destroy }; }); diff --git a/src/views/admin/operation/mission/MissionDetail.vue b/src/views/admin/operation/mission/MissionDetail.vue index a6c7761..3a3fa6f 100644 --- a/src/views/admin/operation/mission/MissionDetail.vue +++ b/src/views/admin/operation/mission/MissionDetail.vue @@ -10,12 +10,12 @@
- - + +
- - + +

Dauer

@@ -27,11 +27,11 @@
- - + +
- +
@@ -40,12 +40,12 @@
- - + +
- - + +
@@ -72,9 +72,6 @@

Kontaktdaten

-