/// <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); }
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); }
/// <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); }
/// <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); }
/// <summary> /// Освобождает ресурсы /// </summary> public void Dispose() { if (_worker != null) { // останавливаем рабочий поток _worker.Stop(ConstHelper.WorkerStopWait); _worker = null; } }
/// <summary> /// Освобождение ресурсов /// </summary> public void Dispose() { if (_worker != null) { _worker.Stop(ConstHelper.WorkerStopWait); _worker = null; } }
/// <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; } }
/// <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; } }
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(); }
/// <summary> /// Освобождает ресурсы /// </summary> public void Dispose() { if (_worker != null) { // останавливаем рабочий поток _worker.Stop(ConstHelper.WorkerStopWait); _worker = null; } if (_queue != null) { // сериализуем очередь GenericSerializer.Serialize(_queue.ToList(), SpoolFile); _queue = null; } }