Files
Superalgos/server.js
T
2018-02-19 07:04:06 +01:00

311 lines
8.7 KiB
JavaScript

const MODULE_NAME = "Node Server";
const START_BROWSER_APP = true;
/*
const octokit = require('@octokit/rest')()
global.atob = require("atob");
let owner = "AAMasters";
let repo = "AABruce-Bot";
let branch = "master";
let page = 1;
let per_page = 100;
let ref = "master";
let path = "One-Min-Daily-Candles-Volumes/run.js";
octokit.repos.getContent({ owner, repo, path, ref }, onContent);
function onContent (error, result) {
let decoded = atob(result.data.content);
console.log(decoded);
console.log(result);
}
*/
//'use strict';
var http = require('http');
var port = process.env.PORT || 1337;
startHtttpServer();
function onRequestReceivedFromBrowser(request, response) {
var htmlResponse;
var requestParameters = request.url.split("/");
switch (requestParameters[1]) {
case "CandleTechnicalAnalisys":
{
respondWithFile('./' + requestParameters[1] + '/' + requestParameters[2], response);
}
break;
case "VolumeTechnicalAnalisys":
{
respondWithFile('./' + requestParameters[1] + '/' + requestParameters[2], response);
}
break;
case "Panels":
{
respondWithFile('./' + requestParameters[1] + '/' + requestParameters[2], response);
}
break;
case "ChartLayers":
{
respondWithFile('./' + requestParameters[1] + '/' + requestParameters[2], response);
}
break;
case "Indicators":
{
respondWithFile('./' + requestParameters[1] + '/' + requestParameters[2], response);
}
break;
case "Azure":
{
respondWithFile('./' + requestParameters[1] + '/' + requestParameters[2], response);
}
break;
case "lastTrades":
{
const marketId = requestParameters[2];
const exchangeId = requestParameters[3];
const sqlQuery = "SELECT TOP 100000 "
+ " InternalExchangeTradeId AS Id, "
+ " Type, "
+ " Rate, "
+ " AmountAssetA AS AmountA, "
+ " AmountAssetB AS AmountB, "
+ " Timestamp "
+ " FROM Trades "
+ " WHERE "
+ " IdMarket = " + marketId + " "
+ " AND "
+ " IdExchange = " + exchangeId + " "
+ " ORDER BY IdExchange ASC, IdMarket ASC, InternalExchangeTradeId DESC"
;
////console.log("About to execute: " + sqlQuery);
/* Then we execute the query */
database.executeSQL(sqlQuery, function (err, resultSet) {
//console.log("Query executed: " + sqlQuery);
var myJsonString = JSON.stringify(resultSet);
////console.log(myJsonString);
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.write(myJsonString);
response.end("\n");
}
);
}
break;
case "trades":
{
const marketId = requestParameters[2];
const exchangeId = requestParameters[3];
const idBegin = unescape(requestParameters[4]);
const idEnd = unescape(requestParameters[5]);
const sqlQuery = "SELECT "
+ " InternalExchangeTradeId AS Id, "
+ " Type, "
+ " Rate, "
+ " AmountAssetA AS AmountA, "
+ " AmountAssetB AS AmountB, "
+ " Timestamp "
+ " FROM Trades "
+ " WHERE "
+ " IdExchange = " + exchangeId + " "
+ " AND "
+ " IdMarket = " + marketId + " "
+ " AND "
+ " InternalExchangeTradeId >= " + idBegin + " "
+ " AND "
+ " InternalExchangeTradeId <= " + idEnd + " "
+ " ORDER BY IdExchange, IdMarket, InternalExchangeTradeId "
;
let records = idEnd - idBegin;
console.log("Records Requested: " + records + " idBegin = " + idBegin + " idEnd = " + idEnd);
/* Then we execute the query */
database.executeSQL(sqlQuery, function (err, resultSet) {
//console.log("Query executed: " + sqlQuery);
var myJsonString = JSON.stringify(resultSet);
////console.log(myJsonString);
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.write(myJsonString);
response.end("\n");
}
);
}
break;
case "orderbook":
{
const marketId = requestParameters[2];
const datetimeBegin = unescape(requestParameters[3]);
const datetimeEnd = unescape(requestParameters[4]);
var sqlQuery = "SELECT "
+ " Id, "
+ " Rate, "
+ " Amount * Rate AS AmountA, "
+ " Amount AS AmountB, "
+ " Type AS Type, "
+ " DatetimeIn AS DatetimeIn, "
+ " ISNULL(DatetimeOut, '3000-01-01') AS DatetimeOut "
+ " FROM OrderBooks "
+ " WHERE "
+ " ( "
+ " IdMarket = " + marketId + " "
+ " ) "
+ " AND "
+ " ( "
+ " DatetimeIn <= '" + datetimeEnd + "' "
+ " ) "
+ " AND "
+ " ( "
+ " ISNULL(DatetimeOut, '3000-01-01') > '" + datetimeBegin + "' "
+ " ) "
;
//console.log(sqlQuery);
/* Then we execute the query */
database.executeSQL(sqlQuery, function (err, resultSet) {
var myJsonString = JSON.stringify(resultSet);
//console.log(myJsonString);
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.write(myJsonString);
response.end("\n");
}
);
}
break;
default:
////console.log("Unknown request received from the browser: " + request.url);
if (requestParameters[1] === "") {
requestParameters[1] = "index.html";
}
respondWithFile("" + requestParameters[1], response);
}
function sendResponseToBrowser(htmlResponse) {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.write(htmlResponse);
response.end("\n");
}
}
function respondWithFile(fileName, response) {
let fs = require('fs');
try {
fs.readFile(fileName, onFileRead);
function onFileRead(err, file) {
try {
let htmlResponse = file.toString();
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.
response.setHeader("Access-Control-Allow-Origin", "*"); // Allows to access data from other domains.
response.writeHead(200, { 'Content-Type': 'text/html' });
response.write(htmlResponse);
response.end("\n");
console.log("File Sent: " + fileName);
//
}
catch (err) {
returnEmptyArray();
console.log("File Not Found: " + fileName);
}
}
}
catch (err) {
returnEmptyArray();
}
function returnEmptyArray() {
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.
response.writeHead(200, { 'Content-Type': 'text/html' });
response.write("[]");
response.end("\n");
}
}
function startHtttpServer() {
if (START_BROWSER_APP === true) {
try {
gWebServer = http.createServer(onRequestReceivedFromBrowser).listen(port);
}
catch (err) {
console.log(err);
}
}
}