Minetrack/lib/server.js

75 lines
1.8 KiB
JavaScript
Raw Normal View History

var http = require('http');
var fs = require('fs');
var url = require('url');
var mime = require('mime');
var io = require('socket.io');
var util = require('./util');
2015-11-02 05:46:24 +00:00
var logger = require('./logger');
var config = require('../config.json');
2017-03-11 23:44:21 +00:00
var minecraft = require('../minecraft.json');
2016-02-06 23:34:33 +00:00
var servers = require('../servers.json');
2015-12-26 20:18:09 +00:00
var urlMapping = [];
function setupRoutes() {
var routeKeys = Object.keys(config.routes);
// Map the (static) routes from our config.
for (var i = 0; i < routeKeys.length; i++) {
urlMapping[routeKeys[i]] = config.routes[routeKeys[i]];
}
2015-12-26 20:18:09 +00:00
logger.log('info', 'Routes: %s', routeKeys);
}
2015-12-26 20:18:09 +00:00
function handleRequest(req, res) {
var requestUrl = url.parse(req.url).pathname;
logger.log('info', '%s requested: %s', util.getRemoteAddr(req), requestUrl);
2015-11-02 07:08:54 +00:00
2020-03-30 06:06:50 +00:00
if (requestUrl === '/publicConfig.json') {
2016-02-06 23:34:33 +00:00
res.setHeader('Content-Type', 'application/javascript');
var publicConfig = {
graphDuration: config.graphDuration,
servers: servers,
bootTime: util.getBootTime(),
2017-03-11 23:44:21 +00:00
serverTypesVisible: config.serverTypesVisible || false,
minecraftVersions: minecraft.versions
2016-02-06 23:34:33 +00:00
};
res.write('setPublicConfig(' + JSON.stringify(publicConfig) + ');');
2015-12-26 20:18:09 +00:00
res.end();
} else if (requestUrl in urlMapping) {
var file = urlMapping[requestUrl];
res.setHeader('Content-Type', mime.getType(file));
2017-03-11 23:44:21 +00:00
2015-12-26 20:18:09 +00:00
fs.createReadStream(file).pipe(res);
} else {
res.statusCode = 404;
2015-12-19 03:23:24 +00:00
2015-12-26 20:18:09 +00:00
res.write('404');
res.end();
}
}
2015-12-26 20:18:09 +00:00
exports.start = function() {
setupRoutes();
// Create our tiny little HTTP server.
var server = http.createServer(handleRequest);
server.listen(config.site.port, config.site.ip);
// I don't like this. But it works, I think.
2015-12-19 03:23:24 +00:00
exports.io = io.listen(server);
2015-12-26 20:18:09 +00:00
// Since everything is loaded, let's celebrate!
2015-11-02 05:46:24 +00:00
logger.log('info', 'Started on %s:%d', config.site.ip, config.site.port);
2017-03-11 23:44:21 +00:00
};