export default function useWebSockets(
messageCallback: (message: string) => void,
- connectionStatusCallback: (alive: boolean) => void,
+ connectionStatusCallback: (status: string) => void,
+ statusOptions?: {
+ openMessage: string,
+ pongMessage: string,
+ closeMessage: string,
+ pingErrorMessage: string,
+ },
) {
let socket: WebSocket;
socket.send(JSON.stringify({key: secret}));
+ connectionStatusCallback(statusOptions ? statusOptions.openMessage : "Connection Opened");
+
// ping server
_connectionCheckInterval = setInterval(() => {
socket.ping(null, true, (e: Error) => {
if (e) {
socket.close();
- connectionStatusCallback(false);
+ connectionStatusCallback(statusOptions ? statusOptions.pingErrorMessage : "Connection Lost");
setTimeout(() => connect(socketUrl, secret), _reconnectTimeout);
}
});
});
socket.on("close", (event: WebSocket.CloseEvent) => {
- connectionStatusCallback(false);
+ connectionStatusCallback(statusOptions ? statusOptions.closeMessage : "Connection Closed");
clearInterval(_connectionCheckInterval);
if (!event.wasClean) {
- setTimeout(() => connect(socketUrl, secret), _reconnectTimeout);
+ setTimeout(() => {
+ connect(socketUrl, secret), _reconnectTimeout
+ });
+
}
});
- socket.on("pong", () => connectionStatusCallback(true));
+ socket.on("pong", () => connectionStatusCallback(statusOptions ? statusOptions.pongMessage : "Pong"));
+
+ socket.on('error', () => {});
}
if (socket) {
socket.close();
}
- }
+ };
return {
connect,
/* launch browser window */
await createWindow();
- console.log('[Session]: Connection Alive: ', "loading");
-
try {
authState = await accountAuth() as AuthState;
} catch(e) {
<template>
- <div>
- <div v-if="isAlive">Nominal</div>
- <div v-else>Connecting</div>
+ <div class="statusContainer">
+ <div>{{status}}</div>
</div>
+
</template>
<script lang="ts">
import { defineComponent } from 'vue'
-import { isAlive } from "@/render/shared/connectionStatus";
+import { status } from "@/render/shared/connectionStatus";
export default defineComponent({
name: "ConnectionStatus",
setup() {
return {
- isAlive
+ status
}
}
-})
+});
</script>
+
+<style lang="scss">
+.statusContainer {
+ width: 100vw;
+ display: flex;
+ justify-content: center;
+ :first-child {
+ margin-right: 2px;
+ }
+}
+</style>
// shared
import { ref } from "vue";
-export const isAlive = ref(false);
-
-export const loading = ref(true);
-
-export const setConnectionStatus: IpcListenerCallback<boolean | null> = (payload) => {
- console.log('received payload', payload)
- if (payload) {
- isAlive.value = payload;
- } else {
- loading.value = true;
- }
+export const status = ref("");
+export const setConnectionStatus: IpcListenerCallback<string> = (payload) => {
+ status.value = payload;
};
export default {
- isAlive
+ status
};
}
-const onConnectionStatusCallback = (isAlive: boolean | Error) => {
- console.log('[Session]: Connection Alive: ', isAlive);
- ipcEmit('set-connection-status', isAlive);
+const connectionStatusCallback = (status: string) => {
+ ipcEmit('set-connection-status', status);
+}
+
+const statusOptions = {
+ openMessage: "Connected",
+ pongMessage: "Nominal",
+ closeMessage: "Reconnecting",
+ pingErrorMessage: "Connection Lost",
}
const { connect, send, close } = useWebsockets(
onMessageCallback,
- onConnectionStatusCallback
+ connectionStatusCallback,
+ statusOptions
);
/* send a message to the platform */