Files
Superalgos/Projects/Social-Trading/UI/modules/WebSocketsWebAppClient.js
T

129 lines
4.2 KiB
JavaScript

function newSocialTradingModulesWebSocketsWebAppClient() {
let thisObject = {
sendMessage: sendMessage,
initialize: initialize,
finalize: finalize
}
let socketClient
let called = {}
let onMessageFunctionsMap = new Map()
return thisObject
function finalize() {
socketClient.close()
socketClient = undefined
clientInterface = undefined
called = undefined
onMessageFunctionsMap = undefined
}
async function initialize() {
socketClient = new WebSocket('ws://' + JSON.parse(UI.clientNode.config).host + ':' + JSON.parse(UI.clientNode.config).webSocketsPort)
await setUpWebsocketClient()
}
async function setUpWebsocketClient() {
return new Promise(connectToNewtwork)
function connectToNewtwork(resolve, reject) {
try {
socketClient.onopen = () => { onConnection() }
socketClient.onerror = err => { onError(err) }
function onConnection() {
socketClient.onmessage = socketMessage => { onMenssage(socketMessage) }
resolve()
}
function onError(err) {
console.log('[ERROR] Web Sockets WebApp Client -> onError -> err.message = ' + err.message)
console.log('[ERROR] Web Sockets WebApp Client -> onError -> err.stack = ' + err.stack)
}
} catch (err) {
console.log('[ERROR] Web Sockets WebApp Client -> setUpWebsocketClient -> err.stack = ' + err.stack)
}
}
}
function sendMessage(message) {
return new Promise(sendSocketMessage)
function sendSocketMessage(resolve, reject) {
if (socketClient.readyState !== 1) { // 1 means connected and ready.
console.log('[ERROR] Web Sockets WebApp Client -> sendMessage -> Cannot send message while connection is closed.')
reject('Websockets Connection Not Ready.')
return
}
let socketMessage = {
messageId: SA.projects.foundations.utilities.miscellaneousFunctions.genereteUniqueId(),
messageType: 'Request',
payload: message
}
onMessageFunctionsMap.set(socketMessage.messageId, onMenssageFunction)
socketClient.send(
JSON.stringify(socketMessage)
)
function onMenssageFunction(response) {
try {
if (response.result === 'Ok') {
resolve(response.data)
} else {
console.log('[ERROR] Web Sockets WebApp Client -> onMenssage -> response.message = ' + response.message)
reject(response.message)
}
} catch (err) {
callbackFunction = undefined
console.log('[ERROR] Web Sockets WebApp Client -> err.stack = ' + err.stack)
}
}
}
}
function onMenssage(message) {
let response = JSON.parse(message.data)
/*
We get the function that is going to resolve or reject the promise given.
*/
onMenssageFunction = onMessageFunctionsMap.get(response.messageId)
onMessageFunctionsMap.delete(response.messageId)
if (onMenssageFunction !== undefined) {
/*
The message received is a response to a message sent.
*/
onMenssageFunction(response)
} else {
/*
The message received is a not response to a message sent.
That means that is a notification received from the Client App.
*/
let messageHeader
try {
messageHeader = JSON.parse(message)
} catch (err) {
console.log('[ERROR] Web Sockets WebApp Client -> onMenssage -> message = ' + message)
console.log('[ERROR] Web Sockets WebApp Client -> onMenssage -> err.stack = ' + err.stack)
thisObject.socket.close()
return
}
UI.webApp.messageReceived(messageHeader.payload)
}
}
}