From a9cf32419999c854d8198b2ab6b61312b74faedc Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 8 Sep 2021 15:50:09 +0200 Subject: [PATCH] Desktop Web App Websockets Clieent --- .../Network/SA/Modules/WebSocketsClient.js | 1 + Projects/ProjectsSchema.json | 10 ++ .../UI/modules/WebSocketsClient.js | 98 +++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 Projects/Social-Trading/UI/modules/WebSocketsClient.js diff --git a/Projects/Network/SA/Modules/WebSocketsClient.js b/Projects/Network/SA/Modules/WebSocketsClient.js index 150f31932..5c4556fc5 100644 --- a/Projects/Network/SA/Modules/WebSocketsClient.js +++ b/Projects/Network/SA/Modules/WebSocketsClient.js @@ -217,6 +217,7 @@ exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSockets if (socketClient.readyState !== 1) { // 1 means connected and ready. console.log('[ERROR] Web Sockets Client -> sendMessage -> Cannot send message while connection is closed.') reject('Websockets Connection Not Ready.') + return } let socketMessage = { diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 395ff21b4..6b3b9e278 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1495,6 +1495,16 @@ } ], "utilities": [] + }, + "UI":{ + "modules":[ + { + "name": "Web Sockets Client", + "propertyName": "webSocketsClient", + "functionName": "newSocialTradingModulesWebSocketsClient", + "fileName": "WebSocketsClient.js" + } + ] } } ] \ No newline at end of file diff --git a/Projects/Social-Trading/UI/modules/WebSocketsClient.js b/Projects/Social-Trading/UI/modules/WebSocketsClient.js new file mode 100644 index 000000000..40eef9917 --- /dev/null +++ b/Projects/Social-Trading/UI/modules/WebSocketsClient.js @@ -0,0 +1,98 @@ +exports.newSocialTradingModulesWebSocketsClient = function newSocialTradingModulesWebSocketsClient() { + + let thisObject = { + sendMessage: sendMessage, + initialize: initialize, + finalize: finalize + } + + let socketClient + + let called = {} + + return thisObject + + function finalize() { + socketClient.close() + socketClient = undefined + clientInterface = undefined + + called = undefined + } + + async function initialize() { + + socketClient = new WebSocket('ws://' + HOST + ':' + PORT) + + await setUpWebsocketClient() + } + + async function setUpWebsocketClient() { + + return new Promise(connectToNewtwork) + + function connectToNewtwork(resolve, reject) { + + try { + socketClient.onopen = () => { onConnection() } + socketClient.onerror = err => { onError(err) } + + function onConnection() { + resolve() + } + + function onError(err) { + console.log('[ERROR] Web Sockets Client -> onError -> err.message = ' + err.message) + console.log('[ERROR] Web Sockets Client -> onError -> err.stack = ' + err.stack) + } + + } catch (err) { + console.log('[ERROR] Web Sockets 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 Client -> sendMessage -> Cannot send message while connection is closed.') + reject('Websockets Connection Not Ready.') + return + } + + let socketMessage = { + messageType: 'Request', + payload: message + } + socketClient.onmessage = socketMessage => { onMenssage(socketMessage) } + socketClient.send( + JSON.stringify(socketMessage) + ) + + function onMenssage(socketMessage) { + try { + + let response = JSON.parse(socketMessage.data) + /* + Chack if we are waiting for the Handshake response. + */ + + if (response.result === 'Ok') { + resolve(response.data) + } else { + console.log('[ERROR] Web Sockets Client -> onMenssage -> response.message = ' + response.message) + reject(response.message) + } + + } catch (err) { + callbackFunction = undefined + console.log('[ERROR] Web Sockets Client -> err.stack = ' + err.stack) + } + } + } + } +} \ No newline at end of file