Files
Superalgos/Platform/Client/webSocketsInterface.js
T

133 lines
6.4 KiB
JavaScript

exports.newWebSocketsInterface = function newWebSocketsInterface() {
const LOG_INFO = false
let thisObject = {
initialize: initialize,
finalize: finalize
}
const WEB_SOCKET = SA.nodeModules.ws
let socketServer
let port = global.env.PLATFORM_WEB_SOCKETS_INTERFACE_PORT
return thisObject
function finalize() {
socketServer = undefined
}
function initialize() {
setUpWebSocketServer()
}
function setUpWebSocketServer() {
try {
socketServer = new WEB_SOCKET.Server({ port: port })
socketServer.on('connection', onConnection)
function onConnection(socket) {
let lastNonce = -1
if (LOG_INFO === true) {
console.log('New Websocket Connection.')
}
socket.on('message', onMenssage)
function onMenssage(message) {
try {
if (global.env.DEMO_MODE === true) {
/*
In DEMO MODE we will accept Task / Sessioins Running or Stopping if you are requesting this from localhost only.
*/
if (socket._socket.remoteAddress !== "::1") {
if (
message.toString().indexOf('"eventType":"Run Task"') >= 0
||
message.toString().indexOf('"eventType":"Stop Task"') >= 0
||
message.toString().indexOf('"eventType":"Run Trading Session"') >= 0
||
message.toString().indexOf('"eventType":"Stop Trading Session"') >= 0
||
message.toString().indexOf('"eventType":"Resume Trading Session"') >= 0
||
message.toString().indexOf('"eventType":"Run Learning Session"') >= 0
||
message.toString().indexOf('"eventType":"Stop Learning Session"') >= 0
||
message.toString().indexOf('"eventType":"Resume Learning Session"') >= 0
) {
console.log('Trying to execute a Task while in DEMO MODE. Some hacking has taken place!')
console.log('Hacker IP Address is: ' + socket._socket.remoteAddress)
return
}
}
}
if (LOG_INFO === true) {
console.log('Message Received: ' + message.toString().substring(0, 10000))
}
let messageArray = message.toString().split('|*|')
let origin = messageArray[0]
let nonce = messageArray[1]
let messageToEventServer = messageArray[2]
if (origin === 'Web Browser') {
if (isNaN(nonce) || nonce === "") {
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Nonce is not a Number. message = ' + message.substring(0, 1000))
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Nonce is not a Number. nonce = ' + nonce)
return
}
if (nonce === "1") { // this happens once the browser is restarted, and the server is running since a previous session.
lastNonce = 0
}
if (Number(nonce) < Number(lastNonce)) {
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. message = ' + message.substring(0, 1000))
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. nonce = ' + nonce)
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. lastNonce = ' + lastNonce)
return
}
lastNonce = nonce
try {
JSON.parse(messageToEventServer)
} catch (err) {
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Message received from the browser is not a valid JSON. message = ' + message.substring(0, 1000))
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Message received from the browser is not a valid JSON. messageToEventServer = ' + messageToEventServer)
return
}
let acknowledgeMessage = {
action: 'Acknowledge',
nonce: nonce
}
socket.send(JSON.stringify(acknowledgeMessage))
}
PL.servers.EVENT_SERVER.onMessage(messageToEventServer, onResponse)
function onResponse(message) {
socket.send(message)
}
} catch (err) {
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. err = ' + err.stack)
}
}
}
} catch (err) {
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> err.message = ' + err.message)
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> err.message = ' + err.stack)
}
}
}