public KaTaLyzerWorker(PlatformDependencies platformDependencies) { if (!ConfigurationManager.GetInstance().HasConfiguration()) { throw new InvalidOperationException("Can't start KaTaLyzer without configuration"); } _platformDependencies = platformDependencies; _networkAdaptersStatistics = new List <NetworkAdapterStatistics>(); _runningTasks = new List <Task>(); _adapters = ConfigurationManager.GetInstance().GetNetworkAdapterConfiguration().Select(configuration => { NetworkAdapter adapter = null; adapter = new NetworkAdapter(configuration, platformDependencies); adapter.PacketCaptured += ProcessPacket; adapter.ErrorOccured += AdapterErrorOccured; return(adapter); }).ToList(); ulong uploadedCount = 0; _timer = new Timer { Interval = ConfigurationManager.GetInstance().GetUploadInterval() * 1000 }; _timer.Elapsed += async(sender, eventArgs) => { var statisticsRepository = new StatisticsRepository(); try { await statisticsRepository.PersistStatistics(TakeNetworkAdaptersStatistics()); uploadedCount++; StatisticsPersisted?.Invoke(new StatisticsPersistedEventArgs(_capturingStartedAt, DateTime.Now, uploadedCount)); } catch (Exception e) { await KaTaLyzerLogger.Log(LogLevel.Error, e); Error?.Invoke(this, e); } }; }