72 lines
No EOL
1.6 KiB
TypeScript
72 lines
No EOL
1.6 KiB
TypeScript
"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
|
|
}
|
|
|
|
} |