Beispiel #1
0
        /// <summary>
        /// Создает экземпляр класса
        /// </summary>
        /// <param name="eventLink">Логгер</param>
        /// <param name="writeSync">Объект для синхронизации записи изменеий в базу</param>
        public PriceListHandler(IEventLink eventLink, Object writeSync)
        {
            if (eventLink == null)
                throw new ArgumentNullException("eventLink");
            if (writeSync == null)
                throw new ArgumentNullException("writeSync");

            _eventLink = eventLink;
            _writeSync = writeSync;
            _worker = new PeriodicWorker(WatchForPriceLists);
            _worker.Start(_workerPeriod);
        }
Beispiel #2
0
        public ServiceWatchDog(IEnumerable<String> services)
        {
            _controllers = new List<ServiceController>();
            foreach (var service in services)
            {
                _controllers.Add(new ServiceController(service));
            }

            _writer = new StreamWriter(LogFile, true, Encoding.Default);
            _worker = new PeriodicWorker(WatchForServices);
            _worker.Start(5);

            WriteInfo(_guardianStarted);
        }
Beispiel #3
0
        /// <summary>
        /// Создает экземпляр класса
        /// </summary>
        /// <param name="eventLink">Логгер</param>
        /// <param name="workingDirectory">Рабочий каталог</param>
        /// <param name="writeSyncObject">Объект для синхронизации записи данных в базу</param>
        public Queue(IEventLink eventLink, String workingDirectory, Object writeSyncObject)
        {
            if (eventLink == null)
                throw new ArgumentNullException("eventLink");
            if (String.IsNullOrEmpty(workingDirectory))
                throw new ArgumentNullException("workingDirectory");
            if (writeSyncObject == null)
                throw new ArgumentNullException("writeSyncObject");

            _eventLink = eventLink;
            _workingDirectory = workingDirectory;
            _writeSyncObject = writeSyncObject;
            _queueSyncObject = new Object();
            _queue = new Queue<Task>(GenericSerializer.Deserialize<List<Task>>(SpoolFile));
            _mapping = GenericSerializer.Deserialize<HashSet<TableMapper>>(MappingFile);
            _worker = new PeriodicWorker(WatchQueueCallback);
            _worker.Start(_period);
        }
Beispiel #4
0
        /// <summary>
        /// Создает экземпляр очереди отложенных обновлений
        /// </summary>
        /// <param name="eventLink">Логгер</param>
        /// <param name="immediateQueue">Очередь неотложных обновлений</param>
        /// <param name="writeSync">Объект для синхронизации записи в базу</param>
        public DelayedQueue(IEventLink eventLink, Queue immediateQueue, Object writeSync,
            String workingDirectory)
        {
            if (eventLink == null)
                throw new ArgumentNullException("eventLink");
            if (immediateQueue == null)
                throw new ArgumentNullException("immediateQueue");
            if (writeSync == null)
                throw new ArgumentNullException("writeSync");
            if (String.IsNullOrEmpty(workingDirectory))
                throw new ArgumentNullException("workingDirectory");

            _eventLink = eventLink;
            _immediateQueue = immediateQueue;
            _writeSync = writeSync;
            _workingDirectory = workingDirectory;
            _worker = new PeriodicWorker(WatchForDelayedUpdates);
            _worker.Start(_workerPeriod);
        }
Beispiel #5
0
 /// <summary>
 /// Освобождает ресурсы
 /// </summary>
 public void Dispose()
 {
     if (_worker != null)
     {
         // останавливаем рабочий поток
         _worker.Stop(ConstHelper.WorkerStopWait);
         _worker = null;
     }
 }
Beispiel #6
0
 /// <summary>
 /// Освобождение ресурсов
 /// </summary>
 public void Dispose()
 {
     if (_worker != null)
     {
         _worker.Stop(ConstHelper.WorkerStopWait);
         _worker = null;
     }
 }
Beispiel #7
0
        /// <summary>
        /// Выполняется при остановке службы
        /// </summary>
        protected override void OnStop()
        {
            try
            {
                // закрываем доступ к службе управления
                if (_startupFlag != null)
                    _startupFlag.Dispose();

                if (_protocolManagerHost != null)
                {
                    _protocolManagerHost.Dispose();
                    _protocolManagerHost = null;
                }

                if (_mmServiceHost != null)
                {
                    _mmServiceHost.Target.EventLink.Post(EventSources.ManagementService, 
                        _serviceGoodbye);
                    _mmServiceHost.Dispose();
                    _mmServiceHost = null;
                }

                // останавливаем рабочий поток для резервного копирования
                if (_backupWorker != null)
                {
                    _backupWorker.Stop(60);
                    _backupWorker = null;
                }

                // останавливаем рабочий поток для обслуживания логов
                if (_logWorker != null)
                {
                    _logWorker.Stop(60);
                    _logWorker = null;
                }

                // сообщаем об остановке службы
                WriteSyslogInfo(_serviceGoodbye);
            }
            catch (Exception e)
            {
                // записываеминформацию об исключении в лог
                WriteSyslogException(e);
                // сообщаем об остановке службы
                WriteSyslogInfo(_serviceGoodbye);
                // генерируем исключение повторно
                throw;
            }
        }
Beispiel #8
0
        /// <summary>
        /// Выполняется при запуске службы
        /// </summary>
        /// <param name="args">Параметры командной строки</param>
        protected override void OnStart(string[] args)
        {
            // создаем лог
            CreateSyslog();
            String serviceHello = String.Format(_serviceHello, ServiceVersion);
            WriteSyslogInfo(serviceHello);
            try
            {
                // создаем службу управления
                var ms = new ManagementService(new EventLink(StorageFolder));
                
                // публикуем службу управления
                _mmServiceHost = new TcpBinaryHost<ManagementService>(ms);
                _mmServiceHost.Marshal();
                ms.EventLink.Post(EventSources.ManagementService, serviceHello);

                // публикуем менеджер протоколов статистики
                ms.EventLink.Post(EventSources.ManagementService, _protocolManagerStarted);
                _protocolManagerHost = new TcpBinaryHost<StatisticsProtocolManager>(
                    new StatisticsProtocolManager(ms));
                _protocolManagerHost.Marshal();

                // создаем флаг запуска системы
                _startupFlag = new StartupFlag(ms, StorageFolder);
                
                // создаем рабочий поток для резервного копирования
                _backupWorker = new PeriodicWorker(new PeriodicWorkerDelegate(BackupWorker));
                // запускаем его с периодичностью в 1 минуту
                _backupWorker.Start(_mmServiceHost.Target,
                    (Int32)new TimeSpan(0, 1, 0).TotalSeconds);
                
                // создаем рабочий поток для обслуживания логов
                _logWorker = new PeriodicWorker(new PeriodicWorkerDelegate(LogWorker));
                // запускаем его с периодичностью в 12 часов
                _logWorker.Start(_mmServiceHost.Target,
                    (Int32)new TimeSpan(0, 12, 0, 0).TotalSeconds);
            }
            catch (Exception e)
            {
                // записываеминформацию об исключении в лог
                WriteSyslogException(e);
                // генерируем исключение повторно
                throw;
            }
        }
Beispiel #9
0
        public void Dispose()
        {
            if (_worker != null)
            {
                _worker.Stop();
                _worker = null;
            }

            if (_writer != null)
            {
                _writer.Dispose();
                _writer = null;
            }

            if (_controllers != null)
            {
                foreach (var controller in _controllers)
                {
                    controller.Dispose();
                }
                _controllers.Clear();
                _controllers = null;
            }

            WriteInfo(_guardianStopped);
        }
        /// <summary>
        /// Создает экземпляр класса
        /// </summary>
        /// <param name="service">Служба управления терминалом</param>
        public StatisticsProtocolManager(IManagementService service)
        {
            if (service == null)
                throw new ArgumentNullException("service");

            _service = service;

            // создаем кэш типов, реализующих протоколы статистики
            var typesCache = new Dictionary<string, Type>();
            foreach (var fileName in Directory.GetFiles(StorageDirectory, "*.dll"))
            {
                var assembly = LoadAssembly(fileName);
                if (assembly != null)
                    ScanAssembly(assembly, typesCache);
            }

            // создаем список протоколов
            _protocols = new Dictionary<String, IStatisticsProtocol>();

            // просматриваем список сконфигурированных протоколов
            foreach (var protocolSettings in _service.Settings.Statistics.StatParams)
            {
                Type implementationType;

                if (typesCache.TryGetValue(protocolSettings.Name, out implementationType))
                {
                    // создаем экземпляр протокола
                    var protocol = (IStatisticsProtocol)Activator.CreateInstance(
                        implementationType);

                    // конфигурируем его
                    protocol.SetManagementService(_service);
                    protocol.SetProtocolParameter("ТекущийКаталог", StorageDirectory);
                    foreach (var parameter in protocolSettings.Params)
                    {
                        protocol.SetProtocolParameter(parameter.Name, parameter.Value);
                    }

                    // добавляем его в список протоколов
                    if (_protocols.ContainsKey(protocolSettings.Name))
                    {
                        _service.EventLink.Post(EventSources.Statistics, EventType.Warning,
                            String.Format(_configuredMoreThanOnce, protocolSettings.Name));
                    }
                    else
                        _protocols.Add(protocolSettings.Name, protocol);
                }
                else
                    _service.EventLink.Post(EventSources.Statistics, EventType.Warning,
                        String.Format(_implementationNotFound, protocolSettings.Name));
            }

            // создаем очередь событий
            _eventQueueLock = new Object();
            _eventQueue = new Queue<EventData>();

            // запускаем рабочий поток
            _eventsWorker = new PeriodicWorker(ProcessEvents);
            _eventsWorker.Start(_workerPeriod);
        }
 /// <summary>
 /// Освобождение ресурсов
 /// </summary>
 public override void Dispose()
 {
     if (_eventsWorker != null)
     {
         if (_eventsWorker.Running)
             _eventsWorker.Stop(_workerStopTimeout);
         _eventsWorker = null;
     }
     base.Dispose();
 }
Beispiel #12
0
        /// <summary>
        /// Освобождает ресурсы
        /// </summary>
        public void Dispose()
        {
            if (_worker != null)
            {
                // останавливаем рабочий поток
                _worker.Stop(ConstHelper.WorkerStopWait);
                _worker = null;
            }

            if (_queue != null)
            {
                // сериализуем очередь
                GenericSerializer.Serialize(_queue.ToList(), SpoolFile);
                _queue = null;
            }
        }