/// <inheritdoc /> public void Initialize() { this.logger.LogTrace("()"); this.peerDiscovery.DiscoverPeers(CloneParameters(this.Parameters)); foreach (IPeerConnector peerConnector in this.PeerConnectors) { peerConnector.Initialize(CloneParameters(this.Parameters)); peerConnector.StartConnectAsync(); } var peerConnectorAddNode = this.PeerConnectors.First(pc => pc is PeerConnectorAddNode); var peerConnectorConnectNode = this.PeerConnectors.First(pc => pc is PeerConnectorConnectNode); var peerConnectorDiscovery = this.PeerConnectors.First(pc => pc is PeerConnectorDiscovery); // Relate the peer connectors to each other to prevent duplicate connections. var relatedPeerConnectors = new RelatedPeerConnectors(); relatedPeerConnectors.Register("AddNode", peerConnectorAddNode); relatedPeerConnectors.Register("Connect", peerConnectorConnectNode); relatedPeerConnectors.Register("Discovery", peerConnectorDiscovery); this.StartNodeServer(); this.logger.LogTrace("(-)"); }
public void Start() { this.logger.LogTrace("()"); this.Parameters.UserAgent = $"{this.NodeSettings.Agent}:{this.GetVersion()}"; this.Parameters.Version = this.NodeSettings.ProtocolVersion; NodeConnectionParameters clonedParameters = this.Parameters.Clone(); clonedParameters.TemplateBehaviors.Add(new ConnectionManagerBehavior(false, this, this.loggerFactory)); // Don't start peer discovery if we have specified any nodes using the -connect arg. if (!this.connectionManagerSettings.Connect.Any()) { if (this.Parameters.PeerAddressManagerBehaviour().Mode.HasFlag(PeerAddressManagerBehaviourMode.Discover)) { this.logger.LogInformation("Starting peer discovery..."); this.peerDiscoveryLoop = new PeerDiscoveryLoop(this.asyncLoopFactory, this.Network, clonedParameters, this.nodeLifetime, this.peerAddressManager); this.peerDiscoveryLoop.DiscoverPeers(); } this.DiscoverNodesPeerConnector = this.CreatePeerConnector(clonedParameters, this.discoveredNodeRequiredService, WellKnownPeerConnectorSelectors.ByNetwork, PeerIntroductionType.Discover); } else { // Use if we have specified any nodes using the -connect arg var peers = this.connectionManagerSettings.Connect.Select(node => new NetworkAddress(node)).ToArray(); this.peerAddressManager.AddPeers(peers, IPAddress.Loopback, PeerIntroductionType.Connect); clonedParameters.PeerAddressManagerBehaviour().Mode = PeerAddressManagerBehaviourMode.None; this.ConnectNodePeerConnector = this.CreatePeerConnector(clonedParameters, NodeServices.Nothing, WellKnownPeerConnectorSelectors.ByEndpoint, PeerIntroductionType.Connect, this.connectionManagerSettings.Connect.Count); } { // Use if we have specified any nodes using the -addnode arg var peers = this.connectionManagerSettings.AddNode.Select(node => new NetworkAddress(node)).ToArray(); this.peerAddressManager.AddPeers(peers, IPAddress.Loopback, PeerIntroductionType.Add); clonedParameters.PeerAddressManagerBehaviour().Mode = PeerAddressManagerBehaviourMode.AdvertiseDiscover; this.AddNodePeerConnector = this.CreatePeerConnector(clonedParameters, NodeServices.Nothing, WellKnownPeerConnectorSelectors.ByEndpoint, PeerIntroductionType.Add, this.connectionManagerSettings.AddNode.Count); } // Relate the peer connectors to each other to prevent duplicate connections. var relatedPeerConnectors = new RelatedPeerConnectors(); relatedPeerConnectors.Register("Discovery", this.DiscoverNodesPeerConnector); relatedPeerConnectors.Register("Connect", this.ConnectNodePeerConnector); relatedPeerConnectors.Register("AddNode", this.AddNodePeerConnector); this.DiscoverNodesPeerConnector?.StartConnectAsync(); this.ConnectNodePeerConnector?.StartConnectAsync(); this.AddNodePeerConnector?.StartConnectAsync(); this.StartNodeServer(); this.logger.LogTrace("(-)"); }
public void Start() { this.logger.LogTrace("()"); // TODO: Move connection manager to the connector next // so that we can clone the parameters inside it. NetworkPeerConnectionParameters clonedParameters = this.Parameters.Clone(); clonedParameters.TemplateBehaviors.Add(new ConnectionManagerBehavior(false, this, this.loggerFactory)); // Don't start peer discovery if we have specified any nodes using the -connect arg. if (!this.NodeSettings.ConnectionManager.Connect.Any() && this.Parameters.PeerAddressManagerBehaviour().Mode.HasFlag(PeerAddressManagerBehaviourMode.Discover)) { this.logger.LogInformation("Starting peer discovery..."); this.peerDiscoveryLoop = new PeerDiscoveryLoop(this.asyncLoopFactory, this.Network, clonedParameters, this.nodeLifetime, this.peerAddressManager, this.networkPeerFactory); this.peerDiscoveryLoop.DiscoverPeers(); } foreach (PeerConnector peerConnector in this.PeerConnectors) { peerConnector.Initialize(this.asyncLoopFactory, this.logger, this.Network, this.networkPeerFactory, this.nodeLifetime, this.NodeSettings, this.peerAddressManager); } var peerConnectorAddNode = this.PeerConnectors.First(pc => pc is PeerConnectorAddNode); var peerConnectorConnectNode = this.PeerConnectors.First(pc => pc is PeerConnectorConnectNode); var peerConnectorDiscovery = this.PeerConnectors.First(pc => pc is PeerConnectorDiscovery); // Relate the peer connectors to each other to prevent duplicate connections. var relatedPeerConnectors = new RelatedPeerConnectors(); relatedPeerConnectors.Register("AddNode", peerConnectorAddNode); relatedPeerConnectors.Register("Connect", peerConnectorConnectNode); relatedPeerConnectors.Register("Discovery", peerConnectorDiscovery); peerConnectorAddNode.StartConnectAsync(clonedParameters, PeerAddressManagerBehaviourMode.AdvertiseDiscover); // Start the connect connector if the -connect arg is specified at startup, else start the discovery peer connector. if (this.NodeSettings.ConnectionManager.Connect.Any()) { peerConnectorConnectNode.StartConnectAsync(clonedParameters, PeerAddressManagerBehaviourMode.None); } else { peerConnectorDiscovery.StartConnectAsync(clonedParameters, PeerAddressManagerBehaviourMode.AdvertiseDiscover); } this.StartNodeServer(); this.logger.LogTrace("(-)"); }
public void Start() { this.logger.LogTrace("()"); this.Parameters.UserAgent = $"{this.NodeSettings.Agent}:{this.GetVersion()}"; this.Parameters.Version = this.NodeSettings.ProtocolVersion; NetworkPeerConnectionParameters clonedParameters = this.Parameters.Clone(); clonedParameters.TemplateBehaviors.Add(new ConnectionManagerBehavior(false, this, this.loggerFactory)); // Don't start peer discovery if we have specified any nodes using the -connect arg. if (!this.NodeSettings.ConnectionManager.Connect.Any()) { if (this.Parameters.PeerAddressManagerBehaviour().Mode.HasFlag(PeerAddressManagerBehaviourMode.Discover)) { this.logger.LogInformation("Starting peer discovery..."); this.peerDiscoveryLoop = new PeerDiscoveryLoop(this.asyncLoopFactory, this.Network, clonedParameters, this.nodeLifetime, this.peerAddressManager, this.networkPeerFactory); this.peerDiscoveryLoop.DiscoverPeers(); } this.DiscoverNodesPeerConnector = new PeerConnectorDiscovery(this.asyncLoopFactory, this.logger, this.Network, this.networkPeerFactory, this.nodeLifetime, this.NodeSettings, clonedParameters, this.peerAddressManager); } else { // Use if we have specified any nodes using the -connect arg this.ConnectNodePeerConnector = new PeerConnectorConnectNode(this.asyncLoopFactory, this.logger, this.Network, this.networkPeerFactory, this.nodeLifetime, this.NodeSettings, clonedParameters, this.peerAddressManager); } { // Use if we have specified any nodes using the -addnode arg this.AddNodePeerConnector = new PeerConnectorAddNode(this.asyncLoopFactory, this.logger, this.Network, this.networkPeerFactory, this.nodeLifetime, this.NodeSettings, clonedParameters, this.peerAddressManager); } // Relate the peer connectors to each other to prevent duplicate connections. var relatedPeerConnectors = new RelatedPeerConnectors(); relatedPeerConnectors.Register("Discovery", this.DiscoverNodesPeerConnector); relatedPeerConnectors.Register("Connect", this.ConnectNodePeerConnector); relatedPeerConnectors.Register("AddNode", this.AddNodePeerConnector); this.DiscoverNodesPeerConnector?.StartConnectAsync(); this.ConnectNodePeerConnector?.StartConnectAsync(); this.AddNodePeerConnector?.StartConnectAsync(); this.StartNodeServer(); this.logger.LogTrace("(-)"); }