81 lines
2.8 KiB
JavaScript
81 lines
2.8 KiB
JavaScript
const http = require('http');
|
|
const WebSocket = require('ws');
|
|
const url = require('url');
|
|
|
|
module.exports = function Server(port, client, intra) {
|
|
|
|
var refresher; //container for refresher
|
|
|
|
const server = http.createServer((req, res) => {
|
|
if (req.method === "GET") {
|
|
//GET: requesting data
|
|
let u = url.parse(req.url, true);
|
|
if (!u.search)
|
|
return res.end("");
|
|
console.log("GET:", u.search);
|
|
client.processRequestFromUser(u.query)
|
|
.then(result => res.end(JSON.stringify(result[0])))
|
|
.catch(error => res.end(error.toString()));
|
|
} else if (req.method === "POST") {
|
|
//POST: All data processing (required JSON input)
|
|
let data = '';
|
|
req.on('data', chunk => data += chunk);
|
|
req.on('end', () => {
|
|
console.log("POST:", data);
|
|
//process the data storing
|
|
client.processIncomingData(data).then(result => {
|
|
res.end(JSON.stringify(result[0]));
|
|
if (result[1]) {
|
|
refresher.countdown;
|
|
if (result[1] === 'DATA')
|
|
sendToLiveRequests(result[0]);
|
|
intra.forwardToNextNode(result[1], result[0]);
|
|
};
|
|
}).catch(error => res.end(error.toString()));
|
|
});
|
|
};
|
|
});
|
|
server.listen(port, (err) => {
|
|
if (!err)
|
|
console.log(`Server running at port ${port}`);
|
|
});
|
|
|
|
const wsServer = new WebSocket.Server({
|
|
server
|
|
});
|
|
wsServer.on('connection', function connection(ws) {
|
|
ws.onmessage = function(evt) {
|
|
let message = evt.data;
|
|
if (message.startsWith(intra.SUPERNODE_INDICATOR))
|
|
intra.processTaskFromSupernode(message, ws);
|
|
else {
|
|
var request = JSON.parse(message);
|
|
client.processRequestFromUser(request)
|
|
.then(result => {
|
|
ws.send(JSON.stringify(result[0]));
|
|
ws._liveReq = request;
|
|
}).catch(error => {
|
|
if (floGlobals.sn_config.errorFeedback)
|
|
ws.send(error.toString());
|
|
});
|
|
};
|
|
};
|
|
});
|
|
|
|
function sendToLiveRequests(data) {
|
|
wsServer.clients.forEach(ws => {
|
|
if (client.checkIfRequestSatisfy(ws._liveReq, data))
|
|
ws.send(JSON.stringify(data));
|
|
});
|
|
};
|
|
|
|
Object.defineProperty(this, "http", {
|
|
get: () => server
|
|
});
|
|
Object.defineProperty(this, "webSocket", {
|
|
get: () => wsServer
|
|
});
|
|
Object.defineProperty(this, "refresher", {
|
|
set: (r) => refresher = r
|
|
});
|
|
}; |