You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

92 line
2.1 KiB

  1. let config = require('./config/serverConfig');
  2. let router = require('./security/router');
  3. module.exports = {
  4. init: function (callback) {
  5. let app = require('express')();
  6. let server = require('http').createServer(app);
  7. global.io = require('socket.io')(server);
  8. app.use(function (req, res, next) {
  9. if ((req.url.indexOf('/server') !== 0) && (req.url.indexOf('/mods') !== 0))
  10. req.url = '/client/' + req.url;
  11. next();
  12. });
  13. let lessMiddleware = require('less-middleware');
  14. app.use(lessMiddleware('../', {
  15. force: true,
  16. render: {
  17. strictMath: true
  18. }
  19. }));
  20. app.get('/', this.requests.root.bind(this));
  21. app.get(/^(.*)$/, this.requests.default.bind(this));
  22. io.on('connection', this.listeners.onConnection.bind(this));
  23. let port = process.env.PORT || config.port || 4000;
  24. server.listen(port, function () {
  25. let message = config.startupMessage || 'Server: Ready';
  26. console.log(message);
  27. callback();
  28. });
  29. },
  30. listeners: {
  31. onConnection: function (socket) {
  32. socket.on('handshake', this.listeners.onHandshake.bind(this, socket));
  33. socket.on('disconnect', this.listeners.onDisconnect.bind(this, socket));
  34. socket.on('request', this.listeners.onRequest.bind(this, socket));
  35. socket.emit('handshake');
  36. },
  37. onHandshake: function (socket) {
  38. cons.onHandshake(socket);
  39. },
  40. onDisconnect: function (socket) {
  41. cons.onDisconnect(socket);
  42. },
  43. onRequest: function (socket, msg, callback) {
  44. msg.callback = callback;
  45. if (!msg.data)
  46. msg.data = {};
  47. if (msg.cpn) {
  48. if (!router.allowedCpn(msg))
  49. return;
  50. cons.route(socket, msg);
  51. } else {
  52. if (!router.allowedGlobal(msg))
  53. return;
  54. msg.socket = socket;
  55. global[msg.module][msg.method](msg);
  56. }
  57. }
  58. },
  59. requests: {
  60. root: function (req, res) {
  61. //let ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
  62. //if (ip !== '::1')
  63. // return;
  64. res.sendFile('index.html');
  65. },
  66. default: function (req, res) {
  67. let root = req.url.split('/')[1];
  68. let file = req.params[0];
  69. file = file.replace('/' + root + '/', '');
  70. res.sendFile(file, {
  71. root: '../' + root
  72. });
  73. }
  74. }
  75. };