void AttachedNode_StateChanged(Node node, NodeState oldState) { ListenerTrace.Info("State change " + node.State); if (node.State == NodeState.HandShaked) { ListenerTrace.Info("Node handshaked"); AttachedNode.MessageReceived += _Listener.node_MessageReceived; AttachedNode.Disconnected += AttachedNode_Disconnected; ListenerTrace.Info("Connection count : " + NodesGroup.GetNodeGroup(node).ConnectedNodes.Count); } }
/// <summary> /// Connect the wallet with the given connection parameters /// </summary> /// <param name="parameters"></param> public void Connect(NodeConnectionParameters parameters) { if (State != WalletState.Created) { throw new InvalidOperationException("The wallet is already connecting or connected"); } var group = NodesGroup.GetNodeGroup(parameters); if (group == null) { group = new NodesGroup(_Parameters.Network, parameters); } parameters = group.NodeConnectionParameters; group.Requirements.MinVersion = ProtocolVersion.PROTOCOL_VERSION; group.Requirements.RequiredServices = NodeServices.Network; var chain = parameters.TemplateBehaviors.Find <ChainBehavior>(); if (chain == null) { chain = new ChainBehavior(new ConcurrentChain(_Parameters.Network)); parameters.TemplateBehaviors.Add(chain); } if (chain.Chain.Genesis.HashBlock != _Parameters.Network.GetGenesis().GetHash()) { throw new InvalidOperationException("ChainBehavior with invalid network chain detected"); } var addrman = parameters.TemplateBehaviors.Find <AddressManagerBehavior>(); if (addrman == null) { addrman = new AddressManagerBehavior(new AddressManager()); parameters.TemplateBehaviors.Add(addrman); } var tracker = parameters.TemplateBehaviors.Find <TrackerBehavior>(); if (tracker == null) { tracker = new TrackerBehavior(new Tracker(), chain.Chain); parameters.TemplateBehaviors.Add(tracker); } _Chain = chain.Chain; _AddressManager = addrman.AddressManager; _Tracker = tracker.Tracker; _TrackerBehavior = tracker; _Group = group; if (AddKnownScriptToTracker()) { _Group.Purge("Bloom filter renew"); } _State = WalletState.Disconnected; _Group.Connect(); _Group.ConnectedNodes.Added += ConnectedNodes_Added; _Group.ConnectedNodes.Removed += ConnectedNodes_Added; foreach (var node in _Group.ConnectedNodes) { node.Behaviors.Find <TrackerBehavior>().Scan(_ScanLocation, Created); } }