Browse Source

feat #1753: Finished refactor of server.js

tags/v0.9.0^2
Shaun 3 years ago
parent
commit
f89589199a
6 changed files with 146 additions and 140 deletions
  1. +1
    -1
      src/server/index.js
  2. +0
    -130
      src/server/server.js
  3. +63
    -0
      src/server/server/index.js
  4. +0
    -9
      src/server/server/listeners.js
  5. +47
    -0
      src/server/server/onConnection.js
  6. +35
    -0
      src/server/server/requestHandlers.js

+ 1
- 1
src/server/index.js View File

@@ -1,6 +1,6 @@
require('./globals');

let server = require('./server');
let server = require('./server/index');
let components = require('./components/components');
let mods = require('./misc/mods');
let animations = require('./config/animations');


+ 0
- 130
src/server/server.js View File

@@ -1,130 +0,0 @@
//Imports
const http = require('http');

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']
});

global.cons.sockets = socketServer.sockets;

app.use(compression());
app.use(minify());

app.use(function (req, res, next) {
if (
!rest.willHandle(req.url) &&
req.url.indexOf('/server') !== 0 &&
req.url.indexOf('/mods') !== 0
)
req.url = '/client/' + req.url;

next();
});

rest.init(app);

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

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

server.listen(port, function () {
_.log(startupMessage);

resolve();
});
});
};

//Exports
module.exports = {
init
};

+ 63
- 0
src/server/server/index.js View File

@@ -0,0 +1,63 @@
//Imports
const http = require('http');

const socketIo = require('socket.io');

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

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

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

const onConnection = require('./onConnection');
const { appRoot, appFile } = require('./requestHandlers');

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

global.cons.sockets = socketServer.sockets;

app.use(compression());
app.use(minify());

app.use((req, res, next) => {
if (
!rest.willHandle(req.url) &&
req.url.indexOf('/server') !== 0 &&
req.url.indexOf('/mods') !== 0
)
req.url = '/client/' + req.url;

next();
});

rest.init(app);

app.get('/', appRoot);
app.get(/^(.*)$/, appFile);

socketServer.on('connection', onConnection);

server.listen(port, () => {
_.log(startupMessage);

resolve();
});
});
};

//Exports
module.exports = {
init
};

+ 0
- 9
src/server/server/listeners.js View File

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

};

//Exports
module.exports = {
onGetConnection
};

+ 47
- 0
src/server/server/onConnection.js View File

@@ -0,0 +1,47 @@
//Imports
const router = require('../security/router');

//Events
const onHandshake = socket => {
cons.onHandshake(socket);
};

const onDisconnect = socket => {
cons.onDisconnect(socket);
};

const onRequest = (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 onConnection = socket => {
socket.on('handshake', onHandshake.bind(null, socket));
socket.on('disconnect', onDisconnect.bind(null, socket));
socket.on('request', onRequest.bind(null, socket));

socket.emit('handshake');
};

//Exports
module.exports = onConnection;

+ 35
- 0
src/server/server/requestHandlers.js View File

@@ -0,0 +1,35 @@
//Config
const validModPatterns = ['.png', '/ui/', '/clientComponents/', '/audio/'];

//Methods
const appRoot = (req, res) => {
res.sendFile('index.html');
};

const appFile = (req, res) => {
let root = req.url.split('/')[1];
let file = req.params[0];
file = file.replace('/' + root + '/', '');
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 = {
appRoot,
appFile
};

Loading…
Cancel
Save