upgrading session
This commit is contained in:
parent
7bb0bda756
commit
4b3023fd4c
9 changed files with 288 additions and 105 deletions
130
src/modules/ws.ts
Normal file
130
src/modules/ws.ts
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
"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: Buffer) => any) {
|
||||
|
||||
const sendMessage = (data: string) => {
|
||||
|
||||
console.log("Sending message: ", data)
|
||||
|
||||
socket.send(data)
|
||||
|
||||
}
|
||||
|
||||
const onOpen = (event: WebSocket.OpenEvent) => {
|
||||
|
||||
console.log('Connected to Server!');
|
||||
|
||||
}
|
||||
|
||||
const onServerMessage = (event: WebSocket.MessageEvent) => {
|
||||
|
||||
console.log('Message received: ', event);
|
||||
|
||||
receiveCallback(event.data)
|
||||
|
||||
}
|
||||
|
||||
const onClose = (event: WebSocket.CloseEvent) => {
|
||||
console.log("socket closed normally.")
|
||||
}
|
||||
|
||||
const onError = (event: WebSocket.ErrorEvent) => {
|
||||
console.log('WebSocket error: ', event);
|
||||
|
||||
console.log("Reconnecting...")
|
||||
createSocket()
|
||||
}
|
||||
|
||||
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", createSocket)
|
||||
|
||||
console.log("New socket created.")
|
||||
}
|
||||
|
||||
return {
|
||||
createSocket
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Close existing sockets.
|
||||
if (socket) {
|
||||
socket.removeAllListeners();
|
||||
socket.terminate();
|
||||
socket.close();
|
||||
success = false;
|
||||
}
|
||||
|
||||
// Init new socket.
|
||||
socket = new WebSocket(`ws://127.0.0.1:8760`);
|
||||
socket.binaryType = 'arraybuffer';
|
||||
|
||||
// Handle requests for authentication (promise).
|
||||
ipcMain.removeHandler('auth-session'); // avoid setting duplicate handlers
|
||||
ipcMain.handle('auth-session', onAuthSession);
|
||||
|
||||
// handle user message event
|
||||
ipcMain.removeAllListeners('client-message');
|
||||
ipcMain.on('client-message', onClientMessage);
|
||||
|
||||
// handle renderer logout event
|
||||
ipcMain.removeAllListeners('logout');
|
||||
ipcMain.on('logout', (_event, _payload: string) => restart());
|
||||
|
||||
// Connect to the backend.
|
||||
socket.on('open', () => {
|
||||
console.log('Connected to Crimata Servers.');
|
||||
|
||||
// Try to authenticate token right away.
|
||||
backgroundMitt.emit('ipc-renderer', {
|
||||
endpoint: 'auth',
|
||||
message: null
|
||||
});
|
||||
|
||||
success = true;
|
||||
|
||||
});
|
||||
|
||||
// Error handling.
|
||||
socket.on('error', (_e) => {
|
||||
|
||||
console.log('ERROR: Failed to connect.');
|
||||
socket.removeAllListeners();
|
||||
socket.close();
|
||||
|
||||
setTimeout(() => {
|
||||
if (!success) {
|
||||
console.log('Reconnecting...');
|
||||
initSession();
|
||||
}
|
||||
}, 3000); // reconnect timeout
|
||||
|
||||
});
|
||||
|
||||
socket.on('close', () => {
|
||||
console.log('Connection droped! Restarting...');
|
||||
restart();
|
||||
});
|
||||
|
||||
socket.on("message", onMessage);
|
||||
}
|
||||
Loading…
Reference in a new issue