import 'reflect-metadata' import Database from '#application/database' import Logger, { LoggerType } from '#application/logger' import ConsoleManager from '#managers/consoleManager' import DateManager from '#managers/dateManager' import HttpManager from '#managers/httpManager' import MapManager from '#managers/mapManager' import QueueManager from '#managers/queueManager' import SocketManager from '#managers/socketManager' import UserManager from '#managers/userManager' import WeatherManager from '#managers/weatherManager' export class Server { private readonly logger = Logger.type(LoggerType.APP) public async start(): Promise { try { // Initialize database await Database.initialize() // Initialize managers await Promise.all([ HttpManager.boot(HttpManager.getAppInstance()), SocketManager.boot(HttpManager.getAppInstance(), HttpManager.getServerInstance()), QueueManager.boot(), UserManager.boot(), MapManager.boot(), DateManager.boot(), WeatherManager.boot(), ConsoleManager.boot() ]) } catch (error: any) { console.error(error) this.logger.error(`Server failed to start: ${error.message}`) process.exit(1) } } } // Start the server const server = new Server() server.start().catch(console.error)