Refactored for SocketIO server.

This commit is contained in:
ThePendulum
2023-11-13 22:56:46 +01:00
parent ffdfefa6d4
commit 39a27f501e
4 changed files with 249 additions and 20 deletions

View File

@@ -3,7 +3,8 @@
const config = require('config');
const { setTimeout: delay } = require('timers/promises');
const bhttp = require('bhttp');
const WebSocket = require('ws');
// const WebSocket = require('ws');
const io = require('socket.io-client');
const logger = require('simple-node-logger').createSimpleLogger();
const { argv } = require('yargs');
@@ -128,7 +129,10 @@ function handleError(error, socket, domain, data) {
}
async function connect(bot, games) {
const socket = { ws: { readyState: 0 } };
const socket = {
ws: { readyState: 0 },
io: {},
};
socket.connect = async () => {
try {
@@ -140,13 +144,28 @@ async function connect(bot, games) {
logger.info(`Attempting to connect to ${config.socket}`);
socket.ws = new WebSocket(`${config.socket}?${new URLSearchParams({ v: wsCreds.wsId, t: wsCreds.timestamp }).toString()}`, [], {
headers: {
const { origin, pathname } = new URL(config.socket);
socket.io = io(origin, {
path: pathname,
query: {
v: wsCreds.wsId,
t: wsCreds.timestamp,
},
extraHeaders: {
cookie: sessionCookie,
},
});
socket.ws.on('message', async (msg) => {
socket.io.on('connect', () => {
logger.info(`Connected to ${config.socket}`);
});
socket.io.on('connect_error', (error) => {
logger.info(`Failed to connect to ${config.socket}: ${error}`);
});
socket.io.on('_', async (msg) => {
const [domain, data] = JSON.parse(msg);
logger.debug(`Received ${domain}: ${JSON.stringify(data)}`);
@@ -160,18 +179,12 @@ async function connect(bot, games) {
}
});
socket.ws.on('close', async (info) => {
socket.io.on('close', async (info) => {
logger.error(`WebSocket closed, reconnecting in ${config.reconnectDelay} seconds: ${info}`);
await delay(config.reconnectDelay * 1000);
socket.connect();
});
socket.ws.on('error', async (error) => {
logger.error(`WebSocket error: ${error.message}`);
});
logger.info(`Connected to ${config.socket}`);
} catch (error) {
logger.error(`Failed to connect, retrying in ${config.reconnectDelay} seconds: ${error.message}`);
@@ -181,7 +194,7 @@ async function connect(bot, games) {
};
socket.transmit = (domain, data) => {
socket.ws.send(JSON.stringify([domain, data]));
socket.io.emit('_', JSON.stringify([domain, data]));
};
socket.connect();