diff --git a/Projects/Network/SA/Modules/P2PNetworkPeers.js b/Projects/Network/SA/Modules/P2PNetworkPeers.js index 0441f952a..c0e32dd5b 100644 --- a/Projects/Network/SA/Modules/P2PNetworkPeers.js +++ b/Projects/Network/SA/Modules/P2PNetworkPeers.js @@ -39,7 +39,7 @@ exports.newNetworkModulesP2PNetworkPeers = function newNetworkModulesP2PNetworkP peer.p2pNetworkNode = NT.networkNode.p2pNetwork.p2pNodesToConnect[i] if (isAlreadyAConnectedPeer(peer) === true) { continue } peer.webSocketsClient = SA.projects.network.modules.webSocketsNetworkClient.newNetworkModulesWebSocketsNetworkClient() - await peer.webSocketsClient.initialize('Network Peer', peer.p2pNetworkNode) + await peer.webSocketsClient.initialize('Network Peer', peer.p2pNetworkNode, onConnectionClosed) .then(addPeer) .catch(onError) @@ -54,6 +54,16 @@ exports.newNetworkModulesP2PNetworkPeers = function newNetworkModulesP2PNetworkP console.log('[WARN] P2P Network Peers -> onError -> Peer Not Available at the Moment -> ' + peer.p2pNetworkNode.userProfile.userProfileHandle + ' -> ' + peer.p2pNetworkNode.node.name) } } + + function onConnectionClosed(webSocketsClientId) { + for (let i = 0; i < thisObject.peers.length; i++) { + let connectedPeer = thisObject.peers[i] + if (connectedPeer.webSocketsClient.id === webSocketsClientId) { + thisObject.peers.splice(i, 1) + return + } + } + } } function isAlreadyAConnectedPeer(peer) { diff --git a/Projects/Network/SA/Modules/WebSocketsNetworkClient.js b/Projects/Network/SA/Modules/WebSocketsNetworkClient.js index c2db2516a..38fed2cea 100644 --- a/Projects/Network/SA/Modules/WebSocketsNetworkClient.js +++ b/Projects/Network/SA/Modules/WebSocketsNetworkClient.js @@ -1,6 +1,8 @@ exports.newNetworkModulesWebSocketsNetworkClient = function newNetworkModulesWebSocketsNetworkClient() { let thisObject = { + id: undefined, + isConnected: undefined, host: undefined, port: undefined, sendMessage: sendMessage, @@ -27,20 +29,23 @@ exports.newNetworkModulesWebSocketsNetworkClient = function newNetworkModulesWeb onMessageFunctionsMap = undefined } - async function initialize(callerRole, p2pNetworkNode) { + async function initialize(callerRole, p2pNetworkNode, onConnectionClosedCallBack) { web3 = new SA.nodeModules.web3() + thisObject.id = SA.projects.foundations.utilities.miscellaneousFunctions.genereteUniqueId() + thisObject.host = JSON.parse(p2pNetworkNode.node.config).host thisObject.port = JSON.parse(p2pNetworkNode.node.config).webSocketsPort socketClient = new SA.nodeModules.ws('ws://' + thisObject.host + ':' + thisObject.port) - await setUpWebsocketClient(callerRole, p2pNetworkNode) + await setUpWebsocketClient(callerRole, p2pNetworkNode, onConnectionClosedCallBack) console.log('Websockets Client Connected to Network Node via Web Sockets .............. Connected to ' + p2pNetworkNode.userProfile.userProfileHandle + ' -> ' + p2pNetworkNode.node.name + ' -> ' + thisObject.host + ':' + thisObject.port) + thisObject.isConnected = true } - async function setUpWebsocketClient(callerRole, p2pNetworkNode) { + async function setUpWebsocketClient(callerRole, p2pNetworkNode, onConnectionClosedCallBack) { return new Promise(connectToNewtwork) @@ -48,10 +53,11 @@ exports.newNetworkModulesWebSocketsNetworkClient = function newNetworkModulesWeb try { - socketClient.onopen = () => { onConnection() } + socketClient.onopen = () => { onConnectionOpened() } + socketClient.onclose = () => { onConnectionClosed() } socketClient.onerror = err => { onError(err) } - function onConnection() { + function onConnectionOpened() { handshakeProcedure() @@ -200,6 +206,16 @@ exports.newNetworkModulesWebSocketsNetworkClient = function newNetworkModulesWeb } } + function onConnectionClosed() { + if (thisObject.isConnected === true) { + console.log('Websockets Client Connected to Network Node via Web Sockets .............. Disconnected from ' + p2pNetworkNode.userProfile.userProfileHandle + ' -> ' + p2pNetworkNode.node.name + ' -> ' + thisObject.host + ':' + thisObject.port) + } + if (onConnectionClosedCallBack !== undefined) { + onConnectionClosedCallBack(thisObject.id) + } + thisObject.isConnected = false + } + function onError(err) { if (err.message.indexOf('ECONNREFUSED') >= 0) { console.log('[WARN] Web Sockets Client -> onError -> Nobody home at ' + thisObject.host + ':' + thisObject.port)