deemix-gui/server/src/app.ts

66 lines
1.8 KiB
TypeScript
Raw Normal View History

import http from 'http'
import express, { Application } from 'express'
2021-04-24 18:08:08 +02:00
import { Server as WsServer } from 'ws'
2021-06-04 21:29:55 +02:00
import yargs from 'yargs'
import initDebug from 'debug'
2021-06-04 21:29:55 +02:00
import { hideBin } from 'yargs/helpers'
import { registerMiddlewares } from './middlewares'
import indexRouter from './routes'
import { normalizePort } from './helpers/port'
import { getErrorCb, getListeningCb } from './helpers/server-callbacks'
import { registerApis } from './routes/api/register'
2021-05-11 21:45:24 +02:00
import { registerWebsocket } from './websocket'
2021-06-04 21:29:55 +02:00
import type { Arguments } from './types'
import { consoleInfo } from './helpers/errors'
2021-06-04 21:29:55 +02:00
// TODO: Remove type assertion while keeping correct types
const argv = yargs(hideBin(process.argv)).options({
port: { type: 'string', default: '6595' },
host: { type: 'string', default: '127.0.0.1' }
2021-06-04 21:29:55 +02:00
}).argv as Arguments
const DEEMIX_PORT = normalizePort(process.env.DEEMIX_PORT ?? argv.port)
const DEEMIX_HOST = process.env.DEEMIX_HOST ?? argv.host
const debug = initDebug('deemix-gui:server')
export const app: Application = express()
2021-05-11 21:45:24 +02:00
export const wss = new WsServer({ noServer: true })
const server = http.createServer(app)
/* === Middlewares === */
registerMiddlewares(app)
/* === Routes === */
app.use('/', indexRouter)
/* === APIs === */
registerApis(app)
/* === Config === */
2021-06-04 21:29:55 +02:00
app.set('port', DEEMIX_PORT)
/* === Server port === */
if (process.env.NODE_ENV !== 'test') {
2021-06-04 21:29:55 +02:00
server.listen({ port: DEEMIX_PORT, host: DEEMIX_HOST })
}
2021-05-11 21:45:24 +02:00
registerWebsocket(wss)
/* === Server callbacks === */
app.on('mount', a => {
console.log(a)
})
server.on('connect', () => {
consoleInfo('Server connected')
})
2021-04-18 12:11:51 +02:00
server.on('upgrade', (request, socket, head) => {
wss.handleUpgrade(request, socket, head, socket => {
wss.emit('connection', socket, request)
})
2021-04-18 12:11:51 +02:00
})
2021-06-04 21:29:55 +02:00
server.on('error', getErrorCb(DEEMIX_PORT))
server.on('listening', getListeningCb(server, debug))