public void Dispose() { if (DiscoveredNodeGroup != null) { DiscoveredNodeGroup.Dispose(); } if (ConnectNodeGroup != null) { ConnectNodeGroup.Dispose(); } if (AddNodeNodeGroup != null) { AddNodeNodeGroup.Dispose(); } foreach (var server in _Servers) { server.Dispose(); } foreach (var node in ConnectedNodes.Where(n => n.Behaviors.Find <ConnectionManagerBehavior>().OneTry)) { node.Disconnect(); } }
public void Start() { _Parameters.UserAgent = "StratisBitcoin:" + GetVersion(); if (_ConnectionManagerSettings.Connect.Count == 0) { var cloneParameters = _Parameters.Clone(); cloneParameters.TemplateBehaviors.Add(new ConnectionManagerBehavior(false, this)); DiscoveredNodeGroup = CreateNodeGroup(cloneParameters, _DiscoveredNodeRequiredService); DiscoveredNodeGroup.CustomGroupSelector = WellKnownGroupSelectors.ByNetwork; //is the default, but I want to use it DiscoveredNodeGroup.Connect(); } else { var cloneParameters = _Parameters.Clone(); cloneParameters.TemplateBehaviors.Add(new ConnectionManagerBehavior(false, this)); cloneParameters.TemplateBehaviors.Remove <AddressManagerBehavior>(); var addrman = new AddressManager(); addrman.Add(_ConnectionManagerSettings.Connect.Select(c => new NetworkAddress(c)).ToArray(), IPAddress.Loopback); var addrmanBehavior = new AddressManagerBehavior(addrman); addrmanBehavior.Mode = AddressManagerBehaviorMode.None; cloneParameters.TemplateBehaviors.Add(addrmanBehavior); ConnectNodeGroup = CreateNodeGroup(cloneParameters, NodeServices.Nothing); ConnectNodeGroup.MaximumNodeConnection = _ConnectionManagerSettings.Connect.Count; ConnectNodeGroup.CustomGroupSelector = WellKnownGroupSelectors.ByEndpoint; ConnectNodeGroup.Connect(); } { var cloneParameters = _Parameters.Clone(); cloneParameters.TemplateBehaviors.Add(new ConnectionManagerBehavior(false, this)); cloneParameters.TemplateBehaviors.Remove <AddressManagerBehavior>(); var addrman = new AddressManager(); addrman.Add(_ConnectionManagerSettings.AddNode.Select(c => new NetworkAddress(c)).ToArray(), IPAddress.Loopback); var addrmanBehavior = new AddressManagerBehavior(addrman); addrmanBehavior.Mode = AddressManagerBehaviorMode.AdvertizeDiscover; cloneParameters.TemplateBehaviors.Add(addrmanBehavior); AddNodeNodeGroup = CreateNodeGroup(cloneParameters, NodeServices.Nothing); AddNodeNodeGroup.MaximumNodeConnection = _ConnectionManagerSettings.AddNode.Count; AddNodeNodeGroup.CustomGroupSelector = WellKnownGroupSelectors.ByEndpoint; AddNodeNodeGroup.Connect(); } StringBuilder logs = new StringBuilder(); logs.AppendLine("Node listening on:"); foreach (var listen in _ConnectionManagerSettings.Listen) { var cloneParameters = _Parameters.Clone(); var server = new NodeServer(Network); server.LocalEndpoint = listen.Endpoint; server.ExternalEndpoint = _ConnectionManagerSettings.ExternalEndpoint; _Servers.Add(server); cloneParameters.TemplateBehaviors.Add(new ConnectionManagerBehavior(true, this) { Whitelisted = listen.Whitelisted }); server.InboundNodeConnectionParameters = cloneParameters; server.Listen(); logs.Append(listen.Endpoint.Address + ":" + listen.Endpoint.Port); if (listen.Whitelisted) { logs.Append(" (whitelisted)"); } logs.AppendLine(); } Logs.ConnectionManager.LogInformation(logs.ToString()); }