visum-server.mjsโข3.66 kB
// SERVER PERMANENTE VISUM
// Questo server rimane attivo permanentemente in background
// per servire richieste da client esterni
import { PersistentVisumController } from './build/persistent-visum-controller.js';
import { writeFileSync } from 'fs';
console.log('๐๏ธ VISUM SERVER PERMANENTE');
console.log('=' .repeat(50));
console.log('โ ๏ธ QUESTO SERVER RIMANE ATTIVO FINO A Ctrl+C');
console.log('=' .repeat(50));
const SERVER_INFO_FILE = 'visum-server-info.json';
async function startPermanentServer() {
const controller = PersistentVisumController.getInstance();
try {
console.log('๐ Avvio server Visum permanente...');
// Avvia l'istanza Visum persistente
const result = await controller.startPersistentVisumProcess();
if (result.success) {
console.log('โ
SERVER VISUM ATTIVO!');
console.log(`๐ Network: ${result.nodes} nodi, ${result.links} link, ${result.zones} zone`);
// Salva informazioni server per i client
const serverInfo = {
pid: process.pid,
startTime: Date.now(),
startTimeString: new Date().toLocaleString('it-IT'),
nodes: result.nodes,
links: result.links,
zones: result.zones,
status: 'active',
project: 'Campoleone'
};
writeFileSync(SERVER_INFO_FILE, JSON.stringify(serverInfo, null, 2));
console.log(`๐ Info server salvate in ${SERVER_INFO_FILE}`);
console.log('\\n๐ข SERVER IN ASCOLTO');
console.log('๐ก Il server รจ ora pronto per ricevere comandi dai client');
console.log('๐ I client possono connettersi usando PersistentVisumController.getInstance()');
console.log('โก Risposte ultra-veloci garantite (0-16ms)');
console.log('\\n๐ COMANDI:');
console.log(' โข Ctrl+C per fermare il server');
console.log(' โข node visum-client.mjs per testare connessione client');
// Test periodici per mantenere viva la connessione
let pingCount = 0;
const pingInterval = setInterval(async () => {
try {
pingCount++;
const pingResult = await controller.executeCustomCode(`
result = {
'server_ping': ${pingCount},
'nodes': visum.Net.Nodes.Count,
'timestamp': time.time(),
'uptime_minutes': ${pingCount * 2}
}
`, `Server Ping #${pingCount}`);
if (pingResult.success) {
const uptime = Math.floor(pingCount * 2);
console.log(`๐ Server attivo - Ping #${pingCount} - Uptime: ${uptime} min - ${new Date().toLocaleTimeString()}`);
} else {
console.error('โ ๏ธ Ping server fallito:', pingResult.error);
}
} catch (error) {
console.error('โ ๏ธ Errore ping server:', error.message);
}
}, 120000); // Ping ogni 2 minuti
// Gestione Ctrl+C per shutdown pulito
process.on('SIGINT', () => {
console.log('\\n๐ Ricevuto segnale di arresto...');
console.log('๐ Shutdown server in corso...');
clearInterval(pingInterval);
// Aggiorna status server
serverInfo.status = 'shutting_down';
serverInfo.shutdownTime = Date.now();
writeFileSync(SERVER_INFO_FILE, JSON.stringify(serverInfo, null, 2));
console.log('โ
Server Visum arrestato');
process.exit(0);
});
} else {
console.error(`โ Errore avvio server: ${result.message}`);
process.exit(1);
}
} catch (error) {
console.error('โ Errore critico server:', error.message);
process.exit(1);
}
}
startPermanentServer();