129 lines
4.2 KiB
JavaScript
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(socketMessage) {
|
|
|
|
let message = JSON.parse(socketMessage.data)
|
|
/*
|
|
We get the function that is going to resolve or reject the promise given.
|
|
*/
|
|
onMenssageFunction = onMessageFunctionsMap.get(message.messageId)
|
|
onMessageFunctionsMap.delete(message.messageId)
|
|
|
|
if (onMenssageFunction !== undefined) {
|
|
/*
|
|
The message received is a response to a message sent.
|
|
*/
|
|
onMenssageFunction(message)
|
|
} else {
|
|
/*
|
|
The message received is a not response to a message sent.
|
|
That means that is an event received from the Client App.
|
|
*/
|
|
let event
|
|
try {
|
|
event = 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(JSON.stringify(event))
|
|
}
|
|
}
|
|
} |