private void ConfigureSheduler() { // Если у нас уже изменеения if (_neededChangeJob) { #region Remove existing jobs if (_scheduler != null) { // Удалим все задания foreach (var guid in jobsDictionary) { _scheduler.RemoveJob(guid.Key); _logger.Information($"Remove job for {guid.Value} with guid: {guid.Key}"); } _scheduler.Dispose(); _scheduler = null; // Раз задания удалили все - очищаем и хранилку их. jobsDictionary.Clear(); } if (_playerFile != null) { _playerFile.Dispose(); _playerFile = null; } #endregion } // Если количество отметок больше нуля И файл проигрывания указан - добавляем задание. if (_tsLists.Count > 0 && !string.IsNullOrEmpty(FileNameToPlay)) { if (_scheduler == null) { _scheduler = new Scheduler(); } // Создаем наш объект проигрывания. if (_playerFile == null) { _playerFile = new PlayWavFile(_logger, FileNameToPlay); } // Удаляем дубликаты если есть. var jobsTimeLists = _tsLists.Distinct().ToList(); foreach (var timeAt in jobsTimeLists) { var newGuid = _scheduler.AddJob <PlayFileAtTimeJob>(cfg => cfg .UseCron(CrontabPatterns.GetConcretePatterns(timeAt)).WithParameter(_playerFile)); jobsDictionary.Add(newGuid, timeAt); _logger.Information($"Create Job for {timeAt} by GUID: {newGuid}, with play file: {FileNameToPlay}"); } _neededChangeJob = true; } }
/// <summary> /// Получатель сообщений от медиатра /// </summary> /// <param name="notification"></param> public void Handle(IPeriodicPlayDataMsg notification) { Period = notification.Message.EveryMinut; FileNamePeriodPlay = notification.Message.FileName; _logger.Information($"Handle SheduleHandler, period: {Period}, file to play: {FileNamePeriodPlay}"); // Получены новые данные - запускаем/перезапускаем наш шедулер ConfigureSheduler(notification.Message.FileName, notification.Message.EveryMinut); }
public SheduleIntervalHandler(IEventAggregator eventAggregator, CommonLib.Interfaces.ILogger logger) { if (eventAggregator == null) { throw new ArgumentNullException(nameof(eventAggregator)); } _eventAggregator = eventAggregator; _eventAggregator.Subscribe(this); _logger = logger; _scheduler = new Scheduler(); _neededChangeJob = false; _logger.Information("--- Enter Ctor SheduleHandler ---"); }