1
0
forked from noxious/server
noxious_server/src/server.ts

61 lines
1.8 KiB
TypeScript

import { createServer as httpServer, Server as HTTPServer } from 'http'
import cors from 'cors'
import express, { Application } from 'express'
import config from '#application/config'
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 QueueManager from '#managers/queueManager'
import SocketManager from '#managers/socketManager'
import UserManager from '#managers/userManager'
import WeatherManager from '#managers/weatherManager'
import ZoneManager from '#managers/zoneManager'
export class Server {
private readonly app: Application
private readonly http: HTTPServer
private readonly logger = Logger.type(LoggerType.APP)
constructor() {
this.app = express()
this.app.use(cors())
this.app.use(express.json())
this.app.use(express.urlencoded({ extended: true }))
this.http = httpServer(this.app)
}
public async start(): Promise<void> {
try {
// Initialize database
await Database.initialize()
// Start HTTP server
this.http.listen(config.PORT, config.HOST)
this.logger.info(`Server running on port ${config.PORT}`)
// Initialize managers
await Promise.all([
HttpManager.boot(this.app),
SocketManager.boot(this.app, this.http),
QueueManager.boot(),
UserManager.boot(),
// DateManager.boot(),
// WeatherManager.boot(),
ZoneManager.boot(),
ConsoleManager.boot()
])
} catch (error: any) {
this.logger.error(`Server failed to start: ${error.message}`)
process.exit(1)
}
}
}
// Start the server
const server = new Server()
server.start().catch(console.error)