瀏覽代碼

feat #1753: Removed less-middleware and started refactoring server.js

tags/v0.9.0^2
Shaun 3 年之前
父節點
當前提交
2f65718bce
共有 5 個檔案被更改,包括 118 行新增193 行删除
  1. +3
    -3
      src/server/index.js
  2. +4
    -97
      src/server/package-lock.json
  3. +0
    -1
      src/server/package.json
  4. +102
    -92
      src/server/server.js
  5. +9
    -0
      src/server/server/listeners.js

+ 3
- 3
src/server/index.js 查看文件

@@ -49,11 +49,11 @@ let startup = {
onComponentsReady: async function () {
skins.init();
factions.init();

await clientConfig.init();
server.init(this.onServerReady.bind(this));
},

onServerReady: async function () {
await server.init();

await leaderboard.init();

atlas.init();


+ 4
- 97
src/server/package-lock.json 查看文件

@@ -332,12 +332,6 @@
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
"optional": true
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
@@ -538,11 +532,6 @@
"source-map": "~0.6.0"
}
},
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
"integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
},
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
@@ -844,15 +833,6 @@
"ansi-colors": "^4.1.1"
}
},
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
"optional": true,
"requires": {
"prr": "~1.0.1"
}
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -1304,11 +1284,6 @@
"rimraf": "2"
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
@@ -1471,6 +1446,7 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
"dev": true,
"optional": true
},
"gtoken": {
@@ -1505,14 +1481,6 @@
"har-schema": "^2.0.0"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-binary2": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
@@ -1662,11 +1630,6 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz",
"integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg=="
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -1800,40 +1763,6 @@
"safe-buffer": "^5.0.1"
}
},
"less": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
"integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==",
"requires": {
"clone": "^2.1.2",
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
"mime": "^1.4.1",
"mkdirp": "^0.5.0",
"promise": "^7.1.1",
"request": "^2.83.0",
"source-map": "~0.6.0"
},
"dependencies": {
"image-size": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"optional": true
}
}
},
"less-middleware": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/less-middleware/-/less-middleware-3.1.0.tgz",
"integrity": "sha512-1FcTlNE73AVTNwcBykDbCnDPgKZT4VuCZxtlst/i4nB93Y/NsVQsZopK78zfDcT/2lsjBa5xZI8g4SFUhJqsJg==",
"requires": {
"less": "~3.9.0",
"mkdirp": "~0.5.1",
"node.extend": "~2.0.2"
}
},
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -1910,7 +1839,8 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"minipass": {
"version": "2.9.0",
@@ -1935,6 +1865,7 @@
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
"integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
@@ -2090,15 +2021,6 @@
}
}
},
"node.extend": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz",
"integrity": "sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==",
"requires": {
"has": "^1.0.3",
"is": "^3.2.1"
}
},
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
@@ -2301,15 +2223,6 @@
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"optional": true,
"requires": {
"asap": "~2.0.3"
}
},
"proxy-addr": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
@@ -2319,12 +2232,6 @@
"ipaddr.js": "1.9.1"
}
},
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"optional": true
},
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",


+ 0
- 1
src/server/package.json 查看文件

@@ -10,7 +10,6 @@
"express-minify": "^1.0.0",
"google-spreadsheet": "^3.1.15",
"image-size": "^0.9.2",
"less-middleware": "^3.1.0",
"rethinkdbdash": "^2.3.31",
"socket.io": "^2.4.1",
"universal-analytics": "^0.4.23"


+ 102
- 92
src/server/server.js 查看文件

@@ -1,14 +1,95 @@
let compression = require('compression');
let minify = require('express-minify');
let config = require('./config/serverConfig');
let router = require('./security/router');
let rest = require('./security/rest');
//Imports
const http = require('http');

module.exports = {
init: function (callback) {
let app = require('express')();
let server = require('http').createServer(app);
let socketServer = require('socket.io')(server, {
const socketIo = require('socket.io');

const express = require('express');
const compression = require('compression');
const minify = require('express-minify');

const router = require('./security/router');
const rest = require('./security/rest');

const {
port = 4000,
startupMessage = 'Server: Ready'
} = require('./config/serverConfig');

//Methods
const listeners = {
onConnection: function (socket) {
socket.on('handshake', listeners.onHandshake.bind(null, socket));
socket.on('disconnect', listeners.onDisconnect.bind(null, socket));
socket.on('request', listeners.onRequest.bind(null, socket));

socket.emit('handshake');
},
onHandshake: function (socket) {
cons.onHandshake(socket);
},
onDisconnect: function (socket) {
cons.onDisconnect(socket);
},
onRequest: function (socket, msg, callback) {
msg.callback = callback;

if (!msg.data)
msg.data = {};

if (msg.cpn) {
if (!router.allowedCpn(msg))
return;

cons.route(socket, msg);
} else if (msg.threadModule) {
if (!router.allowedGlobalCall(msg.threadModule, msg.method))
return;

cons.route(socket, msg);
} else {
if (!router.allowedGlobal(msg))
return;

msg.socket = socket;
global[msg.module][msg.method](msg);
}
}
};

const requests = {
root: function (req, res) {
res.sendFile('index.html');
},
default: function (req, res) {
let root = req.url.split('/')[1];
let file = req.params[0];
file = file.replace('/' + root + '/', '');
const validModPatterns = ['.png', '/ui/', '/clientComponents/', '/audio/'];
const validRequest = (
root !== 'server' ||
(
file.includes('mods/') &&
validModPatterns.some(v => file.includes(v))
)
);
if (!validRequest)
return null;
res.sendFile(file, {
root: '../' + root
});
}
};

const init = async () => {
return new Promise(resolve => {
const app = express();
const server = http.createServer(app);
const socketServer = socketIo(server, {
transports: ['websocket']
});

@@ -28,93 +109,22 @@ module.exports = {
next();
});

let lessMiddleware = require('less-middleware');
app.use(lessMiddleware('../', {
render: {
strictMath: true
}
}));

rest.init(app);

app.get('/', this.requests.root.bind(this));
app.get(/^(.*)$/, this.requests.default.bind(this));
app.get('/', requests.root);
app.get(/^(.*)$/, requests.default);

socketServer.on('connection', this.listeners.onConnection.bind(this));
socketServer.on('connection', listeners.onConnection);

let port = config.port || 4000;
server.listen(port, function () {
let message = config.startupMessage || 'Server: Ready';
_.log(message);
_.log(startupMessage);

callback();
resolve();
});
},
listeners: {
onConnection: function (socket) {
socket.on('handshake', this.listeners.onHandshake.bind(this, socket));
socket.on('disconnect', this.listeners.onDisconnect.bind(this, socket));
socket.on('request', this.listeners.onRequest.bind(this, socket));

socket.emit('handshake');
},
onHandshake: function (socket) {
cons.onHandshake(socket);
},
onDisconnect: function (socket) {
cons.onDisconnect(socket);
},
onRequest: function (socket, msg, callback) {
msg.callback = callback;

if (!msg.data)
msg.data = {};

if (msg.cpn) {
if (!router.allowedCpn(msg))
return;

cons.route(socket, msg);
} else if (msg.threadModule) {
if (!router.allowedGlobalCall(msg.threadModule, msg.method))
return;

cons.route(socket, msg);
} else {
if (!router.allowedGlobal(msg))
return;

msg.socket = socket;
global[msg.module][msg.method](msg);
}
}
},
requests: {
root: function (req, res) {
res.sendFile('index.html');
},
default: function (req, res) {
let root = req.url.split('/')[1];
let file = req.params[0];
file = file.replace('/' + root + '/', '');
const validModPatterns = ['.png', '/ui/', '/clientComponents/', '/audio/'];
const validRequest = (
root !== 'server' ||
(
file.includes('mods/') &&
validModPatterns.some(v => file.includes(v))
)
);
if (!validRequest)
return null;
res.sendFile(file, {
root: '../' + root
});
}
}
});
};

//Exports
module.exports = {
init
};

+ 9
- 0
src/server/server/listeners.js 查看文件

@@ -0,0 +1,9 @@
//Events
const onGetConnection = () => {

};

//Exports
module.exports = {
onGetConnection
};

Loading…
取消
儲存