Beispiel #1
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 #2
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 #3
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;
            }
        }