63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
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);
|
|
});
|
|
})();
|