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.
 
 
 

76 lines
1.7 KiB

  1. let fs = require('fs');
  2. let mod = {
  3. init: function (callback) {
  4. let app = require('express')();
  5. let server = require('http').createServer(app);
  6. let io = require('socket.io')(server);
  7. app.use(function (req, res, next) {
  8. if (req.url.indexOf('/server') != 0)
  9. req.url = '/client/' + req.url;
  10. next();
  11. });
  12. let lessMiddleware = require('less-middleware');
  13. app.use(lessMiddleware('../', {
  14. force: true,
  15. render: {
  16. strictMath: true
  17. }
  18. }));
  19. app.get('/', this.requests.root.bind(this));
  20. app.get(/^(.*)$/, this.requests.default.bind(this));
  21. io.on('connection', this.listeners.onConnection.bind(this));
  22. let port = process.env.PORT || 5000;
  23. server.listen(port, function () {
  24. let message = 'Server: Ready';
  25. console.log(message);
  26. });
  27. },
  28. listeners: {
  29. onConnection: function (socket) {
  30. socket.on('request', this.listeners.onRequest.bind(this, socket));
  31. },
  32. onRequest: function (socket, msg, callback) {
  33. if (msg.action == 'load') {
  34. let res = JSON.parse(fs.readFileSync('saves/' + msg.fileName + '.json'));
  35. callback(res);
  36. } else if (msg.action == 'save')
  37. fs.writeFileSync('saves/' + msg.fileName + '.json', msg.data);
  38. else if (msg.action == 'getFileList') {
  39. callback(fs.readdirSync('saves/').map(l => (l.split('.')[0])));
  40. return;
  41. } else if (msg.action == 'persist')
  42. require('./persist')(msg.data);
  43. if (callback)
  44. callback();
  45. }
  46. },
  47. requests: {
  48. root: function (req, res) {
  49. res.sendFile('index.html');
  50. },
  51. default: function (req, res, next) {
  52. let root = req.url.split('/')[1];
  53. let file = req.params[0];
  54. file = file.replace('/' + root + '/', '');
  55. res.sendFile(file, {
  56. root: '../' + root
  57. });
  58. }
  59. }
  60. };
  61. mod.init();