import WebSocket from 'ws';
import { getAuthPayload } from "./authPayload";
+import { ipcEmit } from './helpers';
let socket: WebSocket;
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.
export default function useWebSockets(
receiveCallback: (s: string) => void,
console.log("WS:Connected to WS Server!");
const jwt = getAuthPayload();
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();
}
const onClose = (event: WebSocket.CloseEvent) => {
console.log("WS:Socket closed normally.", event.wasClean)
+
+ clearInterval(_connectionCheckInterval);
+
if (!event.wasClean) {
+ ipcEmit('connection-alive', false);
setTimeout(createSocket, 1000);
}
}
console.log("WS:WebSocket error: ", event.message);
}
+
const createSocket = (): WebSocket => {
+ if (_connectionCheckInterval) clearInterval(_connectionCheckInterval);
+
socket = new WebSocket(socketUrl);
// Add listeners.
socket.addEventListener("message", onServerMessage);
socket.addEventListener("close", onClose);
socket.addEventListener("error", onError);
+ socket.addEventListener("pong", () => {
+ ipcEmit('connection-alive', true);
+ });
return socket;