Update App Server

- Use App server port for Websocket Server.
- pause/resume serving and market when node acts as slave/master respectively.
This commit is contained in:
sairajzero 2021-12-30 06:49:48 +05:30
parent c4732f5831
commit 0b70f099b0
3 changed files with 88 additions and 12 deletions

View File

@ -3,11 +3,17 @@ const express = require('express');
const cookieParser = require("cookie-parser");
const sessions = require('express-session');
const Request = require('./request');
const WebSocket = require('ws');
const REFRESH_INTERVAL = 5 * 1000; //10 * 60 * 1000;
module.exports = function App(secret, trustedIDs, DB) {
module.exports = function App(secret, DB) {
if (!(this instanceof App))
return new App(secret, DB);
var server = null,
wss = null;
const app = express();
//session middleware
app.use(sessions({
@ -65,12 +71,67 @@ module.exports = function App(secret, trustedIDs, DB) {
app.post('/withdraw-rupee', Request.WithdrawRupee);
//Manage user tags (Access to trusted IDs only)
Request.trustedIDs = trustedIDs;
app.post('/add-tag', Request.addUserTag);
app.post('/remove-tag', Request.removeUserTag);
Request.DB = DB;
Request.periodicProcess();
let refresher = setInterval(Request.periodicProcess, REFRESH_INTERVAL);
return app;
//Properties
var periodInstance = null;
let self = this;
//return server, express-app, wss
Object.defineProperty(self, "server", {
get: () => server
});
Object.defineProperty(self, "express", {
get: () => app
});
Object.defineProperty(self, "wss", {
get: () => wss
});
//set trustedID for subAdmin requests
Object.defineProperty(self, "trustedIDs", {
set: (ids) => Request.trustedIDs = ids
});
//Start (or) Stop servers
self.start = (port) => new Promise(resolve => {
server = app.listen(port, () => {
wss = new WebSocket.Server({
server
});
resolve(`Server Running at port ${port}`);
});
});
self.stop = () => new Promise(resolve => {
server.close(() => {
server = null;
wss = null;
resolve('Server stopped')
});
});
//(Node is not master) Pause serving the clients
self.pause = () => {
Request.pause();
if (periodInstance !== null) {
clearInterval(periodInstance);
periodInstance = null;
}
}
//(Node is master) Resume serving the clients
self.resume = () => {
Request.resume();
Request.periodicProcess();
if (periodInstance === null)
periodInstance = setInterval(Request.periodicProcess, REFRESH_INTERVAL);
}
Object.defineProperty(self, "periodInstance", {
get: () => periodInstance
});
}

View File

@ -54,10 +54,6 @@ const tokenAPI = {
}
}
function returnRates() {
return coupling.price.currentRate;
}
function addSellOrder(floID, quantity, min_price) {
return new Promise((resolve, reject) => {
if (!floID || !floCrypto.validateAddr(floID))
@ -505,7 +501,9 @@ function blockchainReCheck() {
}
module.exports = {
returnRates,
get rate() {
return coupling.price.currentRate;
},
addBuyOrder,
addSellOrder,
cancelOrder,

View File

@ -21,8 +21,13 @@ INTERNAL.e_code = 500;
const oneDay = 1000 * 60 * 60 * 24;
const maxSessionTimeout = 60 * oneDay;
var serving;
const INVALID_SERVER_MSG = "Incorrect Server. Please connect to main server.";
function validateRequestFromFloID(request, sign, floID, proxy = true) {
return new Promise((resolve, reject) => {
if (!serving)
return reject(INVALID(INVALID_SERVER_MSG));
DB.query("SELECT " + (proxy ? "proxyKey AS pubKey FROM Sessions" : "pubKey FROM Users") + " WHERE floID=?", [floID]).then(result => {
if (result.length < 1)
return reject(INVALID(proxy ? "Session not active" : "User not registered"));
@ -53,6 +58,8 @@ function storeRequest(floID, req_str, sign) {
}
function SignUp(req, res) {
if (!serving)
return res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
let data = req.body,
session = req.session;
if (floCrypto.getFloID(data.pubKey) !== data.floID)
@ -249,11 +256,15 @@ function ListTransactions(req, res) {
}
function getRate(req, res) {
let rate = market.returnRates();
res.send(`${rate}`);
if (!serving)
res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
else
res.send(`${market.rate}`);
}
function Account(req, res) {
if (!serving)
return res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
const setLogin = function(message) {
let randID = floCrypto.randString(16, true);
req.session.random = randID;
@ -506,5 +517,11 @@ module.exports = {
set DB(db) {
DB = db;
market.DB = db;
},
pause() {
serving = false;
},
resume() {
serving = true;
}
};