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; } }
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; } } }
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; } }