import { loadConfig } from './config.js'; import { SocketManager } from './socket/socketmanager.js'; import { natsServer } from './database/nats.js'; import { redisServer } from './database/redis.js'; import express from 'express'; import log4js from 'log4js'; import http from 'http'; import { mongoServer } from './database/mongo.js'; (async () => { // Load configuration const config = loadConfig(); // Setup logger const logger = log4js.getLogger('FarmControl API WS'); logger.level = config.server.logLevel; // Create Express app and HTTP server const app = express(); const server = http.createServer(app); new SocketManager(server); // Connect to NATS (await) try { await natsServer.connect(); } catch (err) { logger.error('Failed to connect to NATS:', err); throw err; } // Connect to Mongo DB (await) try { await mongoServer.connect(); } catch (err) { logger.error('Failed to connect to Mongo DB:', err); throw err; } // Connect to Redis (await) try { await redisServer.connect(); } catch (err) { logger.error('Failed to connect to Redis:', err); throw err; } // Start HTTP server server.listen(config.server.port, () => { logger.info(`Server listening on port ${config.server.port}`); }); process.on('SIGINT', async () => { logger.info('Shutting down...'); await redisServer.disconnect(); await mongoServer.disconnect(); await natsServer.disconnect(); await server.close(); logger.info('Shutdown complete'); process.exit(0); }); })();