Files
DRB-CnC/Client/app.js
2023-08-05 03:11:59 -04:00

102 lines
2.6 KiB
JavaScript

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var http = require('http');
require('dotenv').config();
const { DebugBuilder } = require("./utilities/debugBuilder");
const { checkIn } = require("./controllers/clientController");
var indexRouter = require('./routes/index');
var botRouter = require('./routes/bot');
var clientRouter = require('./routes/client');
var radioRouter = require('./routes/radio');
var { attachRadioSessionToRequest } = require('./controllers/radioController');
const log = new DebugBuilder("client", "app");
var app = express();
var port = process.env.CLIENT_PORT || '3010';
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.set('port', port);
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// Default route
app.use('/', indexRouter);
// Discord bot control route
app.use('/bot', attachRadioSessionToRequest, botRouter);
// Local client control route
app.use("/client", clientRouter);
// Local radio controller route
app.use("/radio", attachRadioSessionToRequest, radioRouter);
// catch 404 and forward to error handler
app.use((req, res, next) => {
next(createError(404));
});
// error handler
app.use((err, req, res, next) => {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
/**
* Start the HTTP background server
*/
async function runHTTPServer() {
var server = http.createServer(app);
server.listen(port);
server.on('error', (error) => {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
log.ERROR(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
log.ERROR(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
});
server.on('listening', () => {
log.INFO("HTTP server started!");
})
}
log.DEBUG(`Starting HTTP Server`);
runHTTPServer();
log.DEBUG("Checking in with the master server")
checkIn(true);