Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

75 строки
1.6 KiB

  1. var fs = require('fs');
  2. var mod = {
  3. init: function (callback) {
  4. var app = require('express')();
  5. var server = require('http').createServer(app);
  6. var 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. var 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. var port = process.env.PORT || 5000;
  23. server.listen(port, function () {
  24. var 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. var 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. }
  42. if (callback)
  43. callback();
  44. }
  45. },
  46. requests: {
  47. root: function (req, res) {
  48. res.sendFile('index.html');
  49. },
  50. default: function (req, res, next) {
  51. var root = req.url.split('/')[1];
  52. var file = req.params[0];
  53. file = file.replace('/' + root + '/', '');
  54. res.sendFile(file, {
  55. 'root': '../' + root
  56. });
  57. }
  58. }
  59. };
  60. mod.init();