diff --git a/Environment.js b/Environment.js index 47627f378..f6e60b177 100644 --- a/Environment.js +++ b/Environment.js @@ -32,6 +32,8 @@ exports.newEnvironment = function () { SERVER_APP_SIGNING_ACCOUNT: 'Social-Trading-Server-App-1', PLATFORM_APP_SIGNING_ACCOUNT: 'Algo-Traders-Platform-1', P2P_NETWORK_NODE_SIGNING_ACCOUNT: 'P2P-Network-Node-1', + P2P_NETWORK_NODE_MAX_INCOMING_PEERS: 2, + P2P_NETWORK_NODE_MAX_OUTGOING_PEERS: 2 } if (process.env.DATA_PATH) { diff --git a/Projects/Network/SA/Modules/P2PNetworkPeers.js b/Projects/Network/SA/Modules/P2PNetworkPeers.js index ddcc56637..0441f952a 100644 --- a/Projects/Network/SA/Modules/P2PNetworkPeers.js +++ b/Projects/Network/SA/Modules/P2PNetworkPeers.js @@ -10,24 +10,34 @@ exports.newNetworkModulesP2PNetworkPeers = function newNetworkModulesP2PNetworkP finalize: finalize } + const RECONNECT_DELAY = 10 * 1000 + let intervalIdConnectToPeers + return thisObject function finalize() { thisObject.peers = undefined + clearInterval(intervalIdConnectToPeers) } async function initialize() { - /* - On a first iteration, we will try to connect to 2 Network Peers, one upstream and one downstream, - meaning one with higher ranking that us, and the other with lower ranking than us. - */ + thisObject.peers = [] - let totalConnected = 0 + + connectToPeers() + intervalIdConnectToPeers = setInterval(connectToPeers, RECONNECT_DELAY); + + } + + async function connectToPeers() { + + if (thisObject.peers.count >= global.env.P2P_NETWORK_NODE_MAX_OUTGOING_PEERS) { return } for (let i = 0; i < NT.networkNode.p2pNetwork.p2pNodesToConnect.length; i++) { - if (totalConnected === 2) { break } + if (thisObject.peers.count >= global.env.P2P_NETWORK_NODE_MAX_OUTGOING_PEERS) { break } let peer = {} 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) .then(addPeer) @@ -35,7 +45,6 @@ exports.newNetworkModulesP2PNetworkPeers = function newNetworkModulesP2PNetworkP function addPeer() { thisObject.peers.push(peer) - totalConnected++ } function onError(err) { @@ -46,5 +55,14 @@ exports.newNetworkModulesP2PNetworkPeers = function newNetworkModulesP2PNetworkP } } } + + function isAlreadyAConnectedPeer(peer) { + for (let i = 0; i < thisObject.peers.length; i++) { + let connectedPeer = thisObject.peers[i] + if (connectedPeer.p2pNetworkNode.node.id === peer.p2pNetworkNode.node.id) { + return true + } + } + } } } \ No newline at end of file