private bool StartNext(PingerEntry pinger) { if (_nextToScan == null) { return(false); } if (_aliveHosts.ContainsKey(_nextToScan)) { IPScanHostState results = _aliveHosts[_nextToScan]; results.Prepare(); pinger._results = results; } else { pinger._results = new IPScanHostState(_nextToScan, _pingsPerScan, _timeout); } RaiseOnScanProgressUpdate(_nextToScan); _nextToScan = _range.GetNext(_nextToScan); _activePings++; pinger._ping.SendAsync(pinger._results.Address, _timeout, _pingBuffer, _pingOptions, pinger); return(true); }
public void Start(IPScanRange range) { lock (_runControlLock) { CheckRunning(); _aliveHosts.Clear(); if (_pingers != null) { foreach (PingerEntry p in _pingers) { p._ping.PingCompleted -= pinger_PingCompleted; } } _pingers = new PingerEntry[_concurrentPings]; for (int i = _concurrentPings - 1; i >= 0; i--) { _pingers[i] = new PingerEntry(); _pingers[i]._ping.PingCompleted += new PingCompletedEventHandler(pinger_PingCompleted); } _range = range; _active = true; _stopEvent.Reset(); RaiseOnStartScan(); Thread t = new Thread(new ThreadStart(Restart)); t.Start(); } }
void pinger_PingCompleted(object sender, PingCompletedEventArgs e) { PingerEntry pinger = (PingerEntry)e.UserState; IPScanHostState results = pinger._results; bool raiseEvent = false; results.StorePingResult(e.Reply.Status == IPStatus.Success ? e.Reply.RoundtripTime : -1); lock (_resultsLock) { if (!results.IsTesting()) { if (results.IsAlive()) { raiseEvent = !_aliveHosts.ContainsKey(results.Address); if (raiseEvent) { _aliveHosts.Add(results.Address, results); } } else { _aliveHosts.Remove(results.Address); } --_activePings; if (!_active) { if (_activePings == 0) { _stopEvent.Set(); RaiseOnStopScan(); } } else { if (_nextToScan == null) { if (_activePings == 0) { if (_continuousScan) { RaiseOnRestartScan(); Restart(); } else { _active = false; _stopEvent.Set(); RaiseOnStopScan(); } } } else { StartNext(pinger); } } } else { pinger._ping.SendAsync(pinger._results.Address, _timeout, _pingBuffer, _pingOptions, pinger); } } if (raiseEvent) { RaiseOnAliveHostFound(results); } }
private bool StartNext(PingerEntry pinger) { if (_nextToScan == null) return false; if (_aliveHosts.ContainsKey(_nextToScan)) { IPScanHostState results = _aliveHosts[_nextToScan]; results.Prepare(); pinger._results = results; } else pinger._results = new IPScanHostState(_nextToScan, _pingsPerScan, _timeout); RaiseOnScanProgressUpdate(_nextToScan); _nextToScan = _range.GetNext(_nextToScan); _activePings++; pinger._ping.SendAsync(pinger._results.Address, _timeout, _pingBuffer, _pingOptions, pinger); return true; }
public void Start(IPScanRange range) { lock (_runControlLock) { CheckRunning(); _aliveHosts.Clear(); if (_pingers != null) { foreach (PingerEntry p in _pingers) p._ping.PingCompleted -= pinger_PingCompleted; } _pingers = new PingerEntry[_concurrentPings]; for (int i = _concurrentPings - 1; i >= 0; i--) { _pingers[i] = new PingerEntry(); _pingers[i]._ping.PingCompleted += new PingCompletedEventHandler(pinger_PingCompleted); } _range = range; _active = true; _stopEvent.Reset(); RaiseOnStartScan(); Thread t = new Thread(new ThreadStart(Restart)); t.Start(); } }