"use strict"; import WebSocket from 'ws'; import { ipcMain } from "electron"; let socket: WebSocket; // Run every time we want to connect to backend. export default function useWebSockets(receiveCallback: (s: string) => any, openCallback: () => any) { // Returns bool (sucess or fail). const sendMessage = (data: any) => { console.log("WS:Sending message: ", data) if (socket.readyState !== 1) { return false } else { socket.send(JSON.stringify(data)) return true } } const onOpen = (event: WebSocket.OpenEvent) => { console.log("WS:Connected to WS Server!"); openCallback() } const onServerMessage = (event: WebSocket.MessageEvent) => { console.log("WS:Message received: ", event.data); receiveCallback(event.data.toString()) } const onClose = (event: WebSocket.CloseEvent) => { console.log("WS:Socket closed normally.") } // Reconnect automatically on error. const onError = (event: WebSocket.ErrorEvent) => { console.log("WS:WebSocket error: ", event.message); console.log("Attempting reconnect in 1s.") setTimeout(createSocket, 1000) } const createSocket = () => { socket = new WebSocket(`ws://127.0.0.1:8760`) // Add listeners. socket.addEventListener("open", onOpen) socket.addEventListener("message", onServerMessage) socket.addEventListener("close", onClose) socket.addEventListener("error", onError) console.log("WS:New socket created.") } return { createSocket, sendMessage } }