Minetrack/lib/server.js
2015-11-09 01:03:03 -06:00

60 lines
1.5 KiB
JavaScript

var http = require('http');
var fs = require('fs');
var url = require('url');
var mime = require('mime');
var io = require('socket.io');
var logger = require('./logger');
var config = require('../config.json');
exports.start = function(callback) {
var urlMapping = [];
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]];
}
logger.log('info', Object.keys(config.routes));
// Create our tiny little HTTP server.
var server = http.createServer(function(req, res) {
var requestUrl = url.parse(req.url).pathname;
logger.log('info', '%s requested: %s', req.connection.remoteAddress, requestUrl);
if (requestUrl === '/status.json') {
res.setHeader('Content-Type', 'text/plain');
res.write(JSON.stringify({
error: true,
message: 'API deprecated.'
}));
res.end();
} else if (requestUrl in urlMapping) {
var file = urlMapping[requestUrl];
res.setHeader('Content-Type', mime.lookup(file));
fs.createReadStream(file).pipe(res);
} else {
res.statusCode = 404;
res.write('404');
res.end();
}
});
server.listen(config.site.port, config.site.ip);
// I don't like this. But it works, I think.
io = io.listen(server);
exports.io = io;
// Since everything is loaded, do some final prep work.
logger.log('info', 'Started on %s:%d', config.site.ip, config.site.port);
callback();
};