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.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)