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.
 
 
 

74 lines
1.4 KiB

  1. //Imports
  2. const http = require('http');
  3. const socketIo = require('socket.io');
  4. const express = require('express');
  5. const compression = require('compression');
  6. const minify = require('express-minify');
  7. const lessMiddleware = require('less-middleware');
  8. const rest = require('../security/rest');
  9. const {
  10. port = 4000,
  11. startupMessage = 'Server: Ready',
  12. isProduction
  13. } = require('../config/serverConfig');
  14. const onConnection = require('./onConnection');
  15. const { appRoot, appFile } = require('./requestHandlers');
  16. //Methods
  17. const init = async () => {
  18. return new Promise(resolve => {
  19. const app = express();
  20. const server = http.createServer(app);
  21. const socketServer = socketIo(server, {
  22. transports: ['websocket']
  23. });
  24. global.cons.sockets = socketServer.sockets;
  25. app.use(compression());
  26. app.use(minify());
  27. app.use((req, res, next) => {
  28. if (
  29. !rest.willHandle(req.url) &&
  30. req.url.indexOf('/server') !== 0 &&
  31. req.url.indexOf('/mods') !== 0
  32. )
  33. req.url = '/client/' + req.url;
  34. next();
  35. });
  36. app.use(lessMiddleware('../',
  37. isProduction ? {
  38. once: true
  39. } : {
  40. force: true
  41. }
  42. ));
  43. rest.init(app);
  44. app.get('/', appRoot);
  45. app.get(/^(.*)$/, appFile);
  46. socketServer.on('connection', onConnection);
  47. server.listen(port, () => {
  48. _.log(startupMessage);
  49. resolve();
  50. });
  51. });
  52. };
  53. //Exports
  54. module.exports = {
  55. init
  56. };