add websocket ping connection check
This commit is contained in:
parent
0cfa2340be
commit
25b03d501c
2 changed files with 31 additions and 1 deletions
|
|
@ -42,7 +42,7 @@ const onProfile = async (
|
||||||
resolve(parsed.profile);
|
resolve(parsed.profile);
|
||||||
|
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
reject(new Error('Failed to fetch profile.'));
|
reject(new Error('Unable to authenticate and fetch account profile.'));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,17 @@
|
||||||
|
|
||||||
import WebSocket from 'ws';
|
import WebSocket from 'ws';
|
||||||
import { getAuthPayload } from "./authPayload";
|
import { getAuthPayload } from "./authPayload";
|
||||||
|
import { ipcEmit } from './helpers';
|
||||||
|
|
||||||
let socket: WebSocket;
|
let socket: WebSocket;
|
||||||
|
|
||||||
const socketUrl = "ws://127.0.0.1:8760"
|
const socketUrl = "ws://127.0.0.1:8760"
|
||||||
|
|
||||||
|
const _connectionCheckTimeout = 4000;
|
||||||
|
const _reconnectTimeout = 1000;
|
||||||
|
let _connectionCheckInterval: ReturnType<typeof setTimeout>;
|
||||||
|
|
||||||
|
|
||||||
// Run every time we want to connect to backend.
|
// Run every time we want to connect to backend.
|
||||||
export default function useWebSockets(
|
export default function useWebSockets(
|
||||||
receiveCallback: (s: string) => void,
|
receiveCallback: (s: string) => void,
|
||||||
|
|
@ -45,6 +51,20 @@ export default function useWebSockets(
|
||||||
console.log("WS:Connected to WS Server!");
|
console.log("WS:Connected to WS Server!");
|
||||||
const jwt = getAuthPayload();
|
const jwt = getAuthPayload();
|
||||||
socket.send(JSON.stringify(jwt));
|
socket.send(JSON.stringify(jwt));
|
||||||
|
|
||||||
|
// ping server
|
||||||
|
_connectionCheckInterval = setInterval(() => {
|
||||||
|
|
||||||
|
if (socket) socket.ping(null, true, (e: Error) => {
|
||||||
|
if (e) {
|
||||||
|
ipcEmit('connection-alive', false);
|
||||||
|
socket.close();
|
||||||
|
setTimeout(createSocket, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}, _connectionCheckTimeout);
|
||||||
|
|
||||||
if (openCallback) openCallback();
|
if (openCallback) openCallback();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -59,7 +79,11 @@ export default function useWebSockets(
|
||||||
|
|
||||||
const onClose = (event: WebSocket.CloseEvent) => {
|
const onClose = (event: WebSocket.CloseEvent) => {
|
||||||
console.log("WS:Socket closed normally.", event.wasClean)
|
console.log("WS:Socket closed normally.", event.wasClean)
|
||||||
|
|
||||||
|
clearInterval(_connectionCheckInterval);
|
||||||
|
|
||||||
if (!event.wasClean) {
|
if (!event.wasClean) {
|
||||||
|
ipcEmit('connection-alive', false);
|
||||||
setTimeout(createSocket, 1000);
|
setTimeout(createSocket, 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -69,8 +93,11 @@ export default function useWebSockets(
|
||||||
console.log("WS:WebSocket error: ", event.message);
|
console.log("WS:WebSocket error: ", event.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const createSocket = (): WebSocket => {
|
const createSocket = (): WebSocket => {
|
||||||
|
|
||||||
|
if (_connectionCheckInterval) clearInterval(_connectionCheckInterval);
|
||||||
|
|
||||||
socket = new WebSocket(socketUrl);
|
socket = new WebSocket(socketUrl);
|
||||||
|
|
||||||
// Add listeners.
|
// Add listeners.
|
||||||
|
|
@ -78,6 +105,9 @@ export default function useWebSockets(
|
||||||
socket.addEventListener("message", onServerMessage);
|
socket.addEventListener("message", onServerMessage);
|
||||||
socket.addEventListener("close", onClose);
|
socket.addEventListener("close", onClose);
|
||||||
socket.addEventListener("error", onError);
|
socket.addEventListener("error", onError);
|
||||||
|
socket.addEventListener("pong", () => {
|
||||||
|
ipcEmit('connection-alive', true);
|
||||||
|
});
|
||||||
|
|
||||||
return socket;
|
return socket;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue