mirror of
https://github.com/KubaPro010/fm-dx-webserver.git
synced 2026-07-31 17:29:19 +02:00
+92
-2
@@ -1,3 +1,6 @@
|
|||||||
|
// index.js - Mod by Highpoint
|
||||||
|
// Version for loading server-side plugins
|
||||||
|
|
||||||
// Library imports
|
// Library imports
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const endpoints = require('./endpoints');
|
const endpoints = require('./endpoints');
|
||||||
@@ -12,6 +15,8 @@ const WebSocket = require('ws');
|
|||||||
const wss = new WebSocket.Server({ noServer: true });
|
const wss = new WebSocket.Server({ noServer: true });
|
||||||
const chatWss = new WebSocket.Server({ noServer: true });
|
const chatWss = new WebSocket.Server({ noServer: true });
|
||||||
const rdsWss = new WebSocket.Server({ noServer: true });
|
const rdsWss = new WebSocket.Server({ noServer: true });
|
||||||
|
const ExtraWss = new WebSocket.Server({ noServer: true });
|
||||||
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const net = require('net');
|
const net = require('net');
|
||||||
const client = new net.Socket();
|
const client = new net.Socket();
|
||||||
@@ -26,6 +31,53 @@ const { logDebug, logError, logInfo, logWarn, logChat } = require('./console');
|
|||||||
const storage = require('./storage');
|
const storage = require('./storage');
|
||||||
const { serverConfig, configExists } = require('./server_config');
|
const { serverConfig, configExists } = require('./server_config');
|
||||||
const pjson = require('../package.json');
|
const pjson = require('../package.json');
|
||||||
|
const config = require('./../config.json');
|
||||||
|
|
||||||
|
// Function to find server files based on the plugins listed in config
|
||||||
|
function findServerFiles(plugins) {
|
||||||
|
let results = [];
|
||||||
|
plugins.forEach(plugin => {
|
||||||
|
// Remove .js extension if present
|
||||||
|
if (plugin.endsWith('.js')) {
|
||||||
|
plugin = plugin.slice(0, -3);
|
||||||
|
}
|
||||||
|
|
||||||
|
const pluginPath = path.join(__dirname, '..', 'plugins', `${plugin}_server.js`);
|
||||||
|
if (fs.existsSync(pluginPath) && fs.statSync(pluginPath).isFile()) {
|
||||||
|
results.push(pluginPath);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start plugins with delay
|
||||||
|
function startPluginsWithDelay(plugins, delay) {
|
||||||
|
plugins.forEach((pluginPath, index) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
const pluginName = path.basename(pluginPath, '.js'); // Extract plugin name from path
|
||||||
|
logInfo(`-----------------------------------------------------------------`);
|
||||||
|
logInfo(`Plugin ${pluginName} is loaded`);
|
||||||
|
require(pluginPath);
|
||||||
|
}, delay * index);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add final log line after all plugins are loaded
|
||||||
|
setTimeout(() => {
|
||||||
|
logInfo(`-----------------------------------------------------------------`);
|
||||||
|
}, delay * plugins.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all plugins from config and find corresponding server files
|
||||||
|
const plugins = findServerFiles(config.plugins);
|
||||||
|
|
||||||
|
// Start the first plugin after 3 seconds, then the rest with 3 seconds delay
|
||||||
|
if (plugins.length > 0) {
|
||||||
|
setTimeout(() => {
|
||||||
|
startPluginsWithDelay(plugins, 3000); // Start plugins with 3 seconds interval
|
||||||
|
}, 3000); // Initial delay of 3 seconds for the first plugin
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
console.log(`\x1b[32m
|
console.log(`\x1b[32m
|
||||||
_____ __ __ ______ __ __ __ _
|
_____ __ __ ______ __ __ __ _
|
||||||
@@ -278,7 +330,13 @@ app.use('/', endpoints);
|
|||||||
wss.on('connection', (ws, request) => {
|
wss.on('connection', (ws, request) => {
|
||||||
const output = serverConfig.xdrd.wirelessConnection ? client : serialport;
|
const output = serverConfig.xdrd.wirelessConnection ? client : serialport;
|
||||||
const clientIp = request.headers['x-forwarded-for'] || request.connection.remoteAddress;
|
const clientIp = request.headers['x-forwarded-for'] || request.connection.remoteAddress;
|
||||||
currentUsers++;
|
|
||||||
|
let clientIpTest = clientIp.split(',')[0].trim();
|
||||||
|
|
||||||
|
if (clientIp !== '127.0.0.1' || (request.connection && request.connection.remoteAddress && request.connection.remoteAddress !== '127.0.0.1') || (request.headers && request.headers['origin'] && request.headers['origin'].trim() !== '')) {
|
||||||
|
currentUsers++;
|
||||||
|
}
|
||||||
|
|
||||||
dataHandler.showOnlineUsers(currentUsers);
|
dataHandler.showOnlineUsers(currentUsers);
|
||||||
if(currentUsers === 1 && serverConfig.autoShutdown === true && serverConfig.xdrd.wirelessConnection) {
|
if(currentUsers === 1 && serverConfig.autoShutdown === true && serverConfig.xdrd.wirelessConnection) {
|
||||||
serverConfig.xdrd.wirelessConnection === true ? connectToXdrd() : serialport.write('x\n');
|
serverConfig.xdrd.wirelessConnection === true ? connectToXdrd() : serialport.write('x\n');
|
||||||
@@ -376,7 +434,9 @@ wss.on('connection', (ws, request) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ws.on('close', (code, reason) => {
|
ws.on('close', (code, reason) => {
|
||||||
currentUsers--;
|
if (clientIp !== '127.0.0.1' || (request.connection && request.connection.remoteAddress && request.connection.remoteAddress !== '127.0.0.1') || (request.headers && request.headers['origin'] && request.headers['origin'].trim() !== '')) {
|
||||||
|
currentUsers--;
|
||||||
|
}
|
||||||
dataHandler.showOnlineUsers(currentUsers);
|
dataHandler.showOnlineUsers(currentUsers);
|
||||||
|
|
||||||
// Find the index of the user's data in storage.connectedUsers array
|
// Find the index of the user's data in storage.connectedUsers array
|
||||||
@@ -476,6 +536,30 @@ rdsWss.on('connection', (ws, request) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//additional web socket for using plugins
|
||||||
|
ExtraWss.on('connection', (ws, request) => {
|
||||||
|
ws.on('message', message => {
|
||||||
|
|
||||||
|
const messageData = JSON.parse(message);
|
||||||
|
const modifiedMessage = JSON.stringify(messageData);
|
||||||
|
|
||||||
|
//Broadcast the message to all other clients
|
||||||
|
ExtraWss.clients.forEach(client => {
|
||||||
|
if (client.readyState === WebSocket.OPEN) {
|
||||||
|
client.send(modifiedMessage); // Send the message to all clients
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
ws.on('close', () => {
|
||||||
|
// logInfo('WebSocket Extra connection closed'); // Use custom logInfo function
|
||||||
|
});
|
||||||
|
|
||||||
|
ws.on('error', error => {
|
||||||
|
logError('WebSocket Extra error: ' + error); // Use custom logError function
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Websocket register for /text, /audio and /chat paths
|
// Websocket register for /text, /audio and /chat paths
|
||||||
httpServer.on('upgrade', (request, socket, head) => {
|
httpServer.on('upgrade', (request, socket, head) => {
|
||||||
if (request.url === '/text') {
|
if (request.url === '/text') {
|
||||||
@@ -498,6 +582,12 @@ httpServer.on('upgrade', (request, socket, head) => {
|
|||||||
rdsWss.emit('connection', ws, request);
|
rdsWss.emit('connection', ws, request);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
} else if (request.url === '/extra') {
|
||||||
|
sessionMiddleware(request, {}, () => {
|
||||||
|
ExtraWss.handleUpgrade(request, socket, head, (ws) => {
|
||||||
|
ExtraWss.emit('connection', ws, request);
|
||||||
|
});
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
socket.destroy();
|
socket.destroy();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user