コード例 #1
0
ファイル: KaTaLyzerWorker.cs プロジェクト: nono3551/KaTaLyzer
        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);
                }
            };
        }