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;
            }
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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 ---");
        }