show connection status poc
This commit is contained in:
parent
e13f90a6cc
commit
4afa716251
5 changed files with 51 additions and 30 deletions
|
|
@ -11,7 +11,13 @@ let _connectionCheckInterval: ReturnType<typeof setTimeout>;
|
|||
|
||||
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;
|
||||
|
|
@ -41,13 +47,15 @@ export default function useWebSockets(
|
|||
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
|
@ -62,15 +70,20 @@ export default function useWebSockets(
|
|||
});
|
||||
|
||||
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', () => {});
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -78,7 +91,7 @@ export default function useWebSockets(
|
|||
if (socket) {
|
||||
socket.close();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
connect,
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ export default async function main() {
|
|||
/* launch browser window */
|
||||
await createWindow();
|
||||
|
||||
console.log('[Session]: Connection Alive: ', "loading");
|
||||
|
||||
try {
|
||||
authState = await accountAuth() as AuthState;
|
||||
} catch(e) {
|
||||
|
|
|
|||
|
|
@ -1,26 +1,37 @@
|
|||
<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>
|
||||
|
|
|
|||
|
|
@ -1,20 +1,12 @@
|
|||
// 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
|
||||
};
|
||||
|
|
|
|||
|
|
@ -60,14 +60,21 @@ const onMessageCallback = (payload: string) => {
|
|||
|
||||
}
|
||||
|
||||
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 */
|
||||
|
|
|
|||
Loading…
Reference in a new issue