コード例 #1
0
        private void UpdateDhtAsync(object state)
        {
            object[] parameters = state as object[];

            DhtNode    dhtNode = parameters[0] as DhtNode;
            IPEndPoint localEP = parameters[1] as IPEndPoint;

            try
            {
                IPEndPoint[] peers;

                if (_lookupOnly)
                {
                    peers = dhtNode.FindPeers(_networkID);
                }
                else
                {
                    peers = dhtNode.Announce(_networkID, localEP.Port);
                }

                _dhtLastUpdated   = DateTime.UtcNow;
                _dhtLastException = null; //reset last error

                if ((peers != null) && (peers.Length > 0))
                {
                    _dhtPeers.AddRange(peers);
                    DiscoveredPeers?.Invoke(this, peers);
                }
            }
            catch (Exception ex)
            {
                _dhtLastException = ex;
            }
        }
コード例 #2
0
        private void UpdateTrackerAsync(object state)
        {
            object[] parameters = state as object[];

            TrackerClient      tracker = parameters[0] as TrackerClient;
            TrackerClientEvent @event  = (TrackerClientEvent)parameters[1];
            IPEndPoint         localEP = parameters[2] as IPEndPoint;

            try
            {
                tracker.Update(@event, localEP);

                switch (@event)
                {
                case TrackerClientEvent.Started:
                case TrackerClientEvent.Completed:
                case TrackerClientEvent.None:
                    if (_lookupOnly)
                    {
                        tracker.Update(TrackerClientEvent.Stopped, localEP);
                    }

                    if (tracker.Peers.Count > 0)
                    {
                        if (_ipv4DhtNode != null)
                        {
                            _ipv4DhtNode.AddNode(tracker.Peers);
                        }

                        if (_ipv6DhtNode != null)
                        {
                            _ipv6DhtNode.AddNode(tracker.Peers);
                        }

                        DiscoveredPeers?.Invoke(this, tracker.Peers);
                    }

                    break;
                }

                tracker.CustomUpdateInterval = _customUpdateInterval;
            }
            catch
            {
                if (tracker.RetriesDone < TRACKER_MAX_RETRIES)
                {
                    tracker.CustomUpdateInterval = TRACKER_RETRY_UPDATE_INTERVAL_SECONDS;
                }
                else
                {
                    tracker.CustomUpdateInterval = TRACKER_FAILED_UPDATE_INTERVAL_SECONDS;
                }
            }
        }
コード例 #3
0
        private void UpdateDhtAsync(object state)
        {
            IPEndPoint localEP = state as IPEndPoint;

            try
            {
                IPEndPoint[] peers;

                if (_lookupOnly)
                {
                    peers = _dhtClient.FindPeers(_networkID);
                }
                else
                {
                    peers = _dhtClient.Announce(_networkID, localEP.Port);
                }

                _dhtLastUpdated   = DateTime.UtcNow;
                _dhtLastException = null; //reset last error

                if ((peers != null) && (peers.Length > 0))
                {
                    lock (_dhtPeers)
                    {
                        foreach (IPEndPoint peer in peers)
                        {
                            if (!_dhtPeers.Contains(peer))
                            {
                                _dhtPeers.Add(peer);
                            }
                        }
                    }

                    DiscoveredPeers?.Invoke(this, peers);
                }
            }
            catch (Exception ex)
            {
                _dhtLastException = ex;
            }
        }