Peers detecting disconnections and auto reconnecting to each other

This commit is contained in:
Luis Fernando Molina committed 2021-11-06 10:23:24 +01:00
1 parent 9352dd8c92
commit 02723165b4
2 files changed
+32 -6

No files matched your search

+11 -1
View File
@@ -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) {
@@ -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)