diff --git a/Projects/Network/NT/Modules/WebSocietsClient.js b/Projects/Network/NT/Modules/WebSocietsClient.js new file mode 100644 index 000000000..996d0d07e --- /dev/null +++ b/Projects/Network/NT/Modules/WebSocietsClient.js @@ -0,0 +1,97 @@ +exports.newNetworkModulesWebSocketsClient = function newNetworkModulesWebSocketsClient() { + + let thisObject = { + sendMessage: sendMessage, + initialize: initialize, + finalize: finalize + } + + let socketClient + let callbackFunction + + return thisObject + + function finalize() { + socketClient.close() + socketClient = undefined + networkInterface = undefined + peerInterface = undefined + } + + function initialize() { + socketClient = new SA.nodeModules.ws({ host: 'localhost', port: global.env.NETWORK_WEB_SOCKETS_INTERFACE_PORT }) + //networkInterface = SA.projects.socialTrading.modules.networkInterface.newSocialTradingModulesNetworkInterface() + + setUpWebsocketClient() + } + + function setUpWebsocketClient() { + try { + let handshakeDone = false + + socketClient.on('onopen', onConnection) + socketClient.on('onmessage', onMenssage) + socketClient.on('onerror', onError) + + function onConnection(socket) { + /* + Send Handshake Message + */ + socketClient.send('Handshake Message') + console.log('Handshake Message Sent') + } + + async function onMenssage(socketMessage) { + try { + + let message = JSON.parse(socketMessage.data) + /* + Chack if we are waiting for the Handshake response. + */ + if (handshakeDone === false) { + if (message.result === 'Ok') { + handshakeDone = true + return + } + } + + callbackFunction.receiveResponse(message) + callbackFunction = undefined + + } catch (err) { + callbackFunction = undefined + console.log('[ERROR] Web Sockets Client -> setUpWebsocketClient -> err.stack = ' + err.stack) + } + } + + function onError(err) { + console.log('[ERROR] Web Sockets Client -> setUpWebsocketClient -> onError -> err.stack = ' + err.stack) + } + + } catch (err) { + console.log('[ERROR] Web Sockets Client -> setUpWebsocketClient -> err.stack = ' + err.stack) + } + } + + function sendMessage(message, callback) { + if (callbackFunction !== undefined) { + console.log('[ERROR] Web Sockets Client -> sendMessage -> Cannot send more messages while waiting for a response.') + return false + } + + if (socketClient.readyState !== 1) { // 1 means connected and ready. + console.log('[ERROR] Web Sockets Client -> sendMessage -> Cannot send message while connection is closed.') + return false + } + + try { + callbackFunction = callback + socketClient.send(message) + return true + } catch (err) { + callbackFunction = false + console.log('[ERROR] Web Sockets Client -> sendMessage -> err.stack = ' + err.stack) + return false + } + } +} \ No newline at end of file diff --git a/Projects/Network/NT/Modules/WebSocketsInterface.js b/Projects/Network/NT/Modules/WebSocketsInterface.js index 6314b0e95..a1a286d87 100644 --- a/Projects/Network/NT/Modules/WebSocketsInterface.js +++ b/Projects/Network/NT/Modules/WebSocketsInterface.js @@ -90,7 +90,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock } } } catch (err) { - console.log('[ERROR] Network -> Web Sockets Interface -> run -> setUpWebSocketServer -> err.stack = ' + err.stack) + console.log('[ERROR] Web Sockets Interface -> setUpWebSocketServer -> err.stack = ' + err.stack) } } } @@ -167,7 +167,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock } } catch (err) { - console.log('[ERROR] Network -> Web Sockets Interface -> run -> setUpWebSocketServer -> err.stack = ' + err.stack) + console.log('[ERROR] Web Sockets Interface -> setUpWebSocketServer -> err.stack = ' + err.stack) } } } \ No newline at end of file diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 0ba8c9061..fbb9b98df 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1279,6 +1279,12 @@ "propertyName": "webSocketsInterface", "functionName": "newNetworkModulesWebSocketsInterface", "fileName": "WebSocketsInterface.js" + }, + { + "name": "Web Sockets Client", + "propertyName": "webSocketsClient", + "functionName": "newNetworkModulesWebSocketsClient", + "fileName": "WebSocketsClient.js" } ], "utilities": [] diff --git a/runDesktop.js b/runDesktop.js index 250438f83..96c4c24c5 100644 --- a/runDesktop.js +++ b/runDesktop.js @@ -45,7 +45,7 @@ SA.nodeModules = { ws: require('ws') } -DK.app = require('./Network/DesktopApp.js').newNetworkNode() +DK.app = require('./Desktop/DesktopApp.js').newDesktopApp() DK.app.run() console.log('Superalgos Desktop is Running.') \ No newline at end of file