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.
 
 
 

121 regels
2.6 KiB

  1. let compression = require('compression');
  2. let minify = require('express-minify');
  3. let config = require('./config/serverConfig');
  4. let router = require('./security/router');
  5. let rest = require('./security/rest');
  6. module.exports = {
  7. init: function (callback) {
  8. let app = require('express')();
  9. let server = require('http').createServer(app);
  10. let socketServer = require('socket.io')(server);
  11. global.cons.sockets = socketServer.sockets;
  12. app.use(compression());
  13. app.use(minify());
  14. app.use(function (req, res, next) {
  15. if (
  16. !rest.willHandle(req.url) &&
  17. req.url.indexOf('/server') !== 0 &&
  18. req.url.indexOf('/mods') !== 0
  19. )
  20. req.url = '/client/' + req.url;
  21. next();
  22. });
  23. let lessMiddleware = require('less-middleware');
  24. app.use(lessMiddleware('../', {
  25. render: {
  26. strictMath: true
  27. }
  28. }));
  29. rest.init(app);
  30. app.get('/', this.requests.root.bind(this));
  31. app.get(/^(.*)$/, this.requests.default.bind(this));
  32. socketServer.on('connection', this.listeners.onConnection.bind(this));
  33. let port = config.port || 4000;
  34. server.listen(port, function () {
  35. let message = config.startupMessage || 'Server: Ready';
  36. _.log(message);
  37. callback();
  38. });
  39. },
  40. listeners: {
  41. onConnection: function (socket) {
  42. socket.on('handshake', this.listeners.onHandshake.bind(this, socket));
  43. socket.on('disconnect', this.listeners.onDisconnect.bind(this, socket));
  44. socket.on('request', this.listeners.onRequest.bind(this, socket));
  45. socket.emit('handshake');
  46. },
  47. onHandshake: function (socket) {
  48. cons.onHandshake(socket);
  49. },
  50. onDisconnect: function (socket) {
  51. cons.onDisconnect(socket);
  52. },
  53. onRequest: function (socket, msg, callback) {
  54. msg.callback = callback;
  55. if (!msg.data)
  56. msg.data = {};
  57. if (msg.cpn) {
  58. if (!router.allowedCpn(msg))
  59. return;
  60. cons.route(socket, msg);
  61. } else if (msg.threadModule) {
  62. if (!router.allowedGlobalCall(msg.threadModule, msg.method))
  63. return;
  64. cons.route(socket, msg);
  65. } else {
  66. if (!router.allowedGlobal(msg))
  67. return;
  68. msg.socket = socket;
  69. global[msg.module][msg.method](msg);
  70. }
  71. }
  72. },
  73. requests: {
  74. root: function (req, res) {
  75. res.sendFile('index.html');
  76. },
  77. default: function (req, res) {
  78. let root = req.url.split('/')[1];
  79. let file = req.params[0];
  80. file = file.replace('/' + root + '/', '');
  81. const validRequest = (
  82. root !== 'server' ||
  83. (
  84. file.includes('mods/') &&
  85. (
  86. file.includes('.png') ||
  87. file.includes('/ui/') ||
  88. file.includes('/clientComponents/')
  89. )
  90. )
  91. );
  92. if (!validRequest)
  93. return null;
  94. res.sendFile(file, {
  95. root: '../' + root
  96. });
  97. }
  98. }
  99. };