示例#1
0
 public RunnerBase(IBusinessLogicData repo)
 {
     _repo        = repo;
     _actionQueue = new ActionQueue.ActionQueue <TIn, TOut>();
 }
示例#2
0
        private static void Start(string[] args)
        {
            _loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
            _logger        = _loggerFactory.CreateLogger <Program>();

            var settings = new ProgramSettings();
            var manager  = new ProgramSettingsManager(_logger);

            manager.ParseCommandLine(settings, args);

            if (!manager.LoadSettings(settings, out var createSample) && createSample)
            {
                manager.CreateSampleSettingsFile();
                return;
            }

            IActionQueue actionQueue     = new ActionQueue.ActionQueue();
            IActionQueue stopActionQueue = new ActionQueue.ActionQueue();

            _monitoringJobExecutor = new MonitoringJobExecutor(actionQueue, _logger);
            _monitoringJobExecutor.OnErrorOccured += OnErrorOccured;

            var actionsCount  = settings.EmailSettingsList.Count;
            var maxConcurrent = settings.maxConcurrent == 0 ? actionsCount : settings.maxConcurrent;

            _monitoringJobExecutor.Start(maxConcurrent);

            IProcessingActionsManager processingActionsManager;

            if (settings.log == "file")
            {
                try
                {
                    processingActionsManager = new LogfileProcessingActionsManager(settings.logFileFullPath);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex.Message);
                    return;
                }
            }
            else
            {
                processingActionsManager = new ConsoleProcessingActionsManager();
            }

            foreach (var setting in settings.EmailSettingsList)
            {
                var monitoringJob = new Monitoring.MonitoringJob(setting, processingActionsManager, _logger);
                actionQueue.Enqueue(monitoringJob.StartMonitoring);
                stopActionQueue.Enqueue(monitoringJob.Stop);
            }

            while (_monitoringJobExecutor.IsRunning)
            {
                if (Console.ReadKey() != default)
                {
                    _monitoringJobExecutor.Stop(stopActionQueue);
                }
            }
        }