diff --git a/quasar.config.ts b/quasar.config.ts
index d9de8b2..581162d 100644
--- a/quasar.config.ts
+++ b/quasar.config.ts
@@ -11,7 +11,7 @@ export default defineConfig((/* ctx */) => {
// app boot file (/src/boot)
// --> boot files are part of "main.js"
// https://v2.quasar.dev/quasar-cli-vite/boot-files
- boot: [],
+ boot: ['websocket'],
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#css
css: ['app.scss'],
diff --git a/src/boot/websocket.ts b/src/boot/websocket.ts
new file mode 100644
index 0000000..99b8e9d
--- /dev/null
+++ b/src/boot/websocket.ts
@@ -0,0 +1,21 @@
+import { boot } from 'quasar/wrappers';
+import type { QVueGlobals } from 'quasar';
+import { initWebSocket } from 'src/services/websocket';
+
+export default boot(({ app }) => {
+ const $q = app.config.globalProperties.$q as QVueGlobals;
+
+ const ws = initWebSocket('ws://127.0.0.1:8100/ws?id=quasar', $q);
+ app.config.globalProperties.$socket = ws;
+ ws.connect();
+});
+
+declare module '@vue/runtime-core' {
+ interface ComponentCustomProperties {
+ $socket: {
+ connect: () => void;
+ close: () => void;
+ socket: WebSocket | null;
+ };
+ }
+}
diff --git a/src/components/DBMTree.vue b/src/components/DBMTree.vue
index ca6ba22..6b6b1f5 100644
--- a/src/components/DBMTree.vue
+++ b/src/components/DBMTree.vue
@@ -57,17 +57,14 @@
diff --git a/src/composables/useWebSocket.ts b/src/services/websocket.ts
similarity index 85%
rename from src/composables/useWebSocket.ts
rename to src/services/websocket.ts
index de2ca4d..79c49a7 100644
--- a/src/composables/useWebSocket.ts
+++ b/src/services/websocket.ts
@@ -1,18 +1,16 @@
import type { Response } from 'src/models/Response';
import type { Publish } from 'src/models/Publish';
import type { Request } from 'src/models/Request';
+import type { QVueGlobals } from 'quasar';
import { subs, buildTree, dbmData } from 'src/composables/dbmTree';
-import { onBeforeUnmount, ref } from 'vue';
-import { useQuasar } from 'quasar';
+import { ref } from 'vue';
const pendingResponses = new Map void>();
-let socket: WebSocket | null = null;
+export let socket: WebSocket | null = null;
const isConnected = ref(false);
-export function useWebSocket(url: string) {
- const $q = useQuasar();
-
+export function initWebSocket(url: string, $q?: QVueGlobals) {
const connect = () => {
socket = new WebSocket(url);
@@ -22,22 +20,24 @@ export function useWebSocket(url: string) {
};
socket.onclose = () => {
isConnected.value = false;
- $q.notify({
+ console.log('WebSocket disconnected');
+ $q?.notify({
message: 'WebSocket disconnected',
color: 'orange',
position: 'bottom-right',
icon: 'warning',
- timeout: 5000,
+ timeout: 10000,
});
};
socket.onerror = (err) => {
+ console.log(`WebSocket error: ${err.type}`);
isConnected.value = false;
- $q.notify({
+ $q?.notify({
message: `WebSocket error: ${err.type}`,
color: 'red',
position: 'bottom-right',
icon: 'error',
- timeout: 5000,
+ timeout: 10000,
});
};
socket.onmessage = (event) => {
@@ -67,13 +67,12 @@ export function useWebSocket(url: string) {
}
};
- onBeforeUnmount(() => {
- close();
- });
+ // onBeforeUnmount(() => {
+ // close();
+ // });
return {
connect,
- send,
close,
socket,
};
@@ -102,7 +101,7 @@ function waitForSocketConnection(): Promise {
});
}
-function send(data: Request): Promise {
+export function send(data: Request): Promise {
const id = generateId();
const payload = { ...data, id };