예제 #1
0
        /// <summary>
        /// Запускает проверку источника данных в отдельном потоке.
        /// </summary>
        /// <param name="dataSource">Проверяемый источник данных</param>
        public void CheckDataSource(MetaObjectApp.DataSource dataSource)
        {
            //Делаем асинхронный делегат, который запускает проверку источника
            IDatasourceMonitor dsm = monitorList.Find((e) => { return(e.DataSourceName == dataSource.DataSourceName); });

            if (dsm == null)
            {
                return;
            }

            AcyncDelegate d = new AcyncDelegate(() => {
                string newControlSum = dsm.controlSum();
                if (newControlSum != dataSource.ControlSum) //контрольная сумма изменилась
                {
                    //сохраняем новую контрольную сумму
                    dataSource.ControlSum = newControlSum;
                    _repository.Save(dataSource);

                    //создаем новый метаобъект "событие"
                    DataSourceEvent newEvent = (DataSourceEvent)_repository.CreateNewMetaObject(MetaObjectType.DataSourceEvent, "");
                    newEvent.EventType       = "DSchanged";
                    newEvent.SetDataSource(dataSource);
                    _repository.Save(newEvent);

                    //добавляем этот метаобъект в метаобъект "события"
                    DataSourceEvents events = _repository.LoadMetaObject("DataSourceEvents") as DataSourceEvents;
                    events.AddDataSourceEvent(newEvent);
                    _repository.Save(events);

                    Raise_DS_Changed(newEvent);
                }
            });

            d.BeginInvoke(null, null);
        }
예제 #2
0
        //методы
        /// <summary>
        /// Генерирует события по регламенту
        /// </summary>
        /// <param name="reglamentElements"></param>
        /// <returns></returns>
        public List <DataSourceEvent> GenerateEvents(List <ReglamentElementMetaObject> reglamentElements)
        {
            List <DataSourceEvent> events = new List <DataSourceEvent>();

            DataSourceEvents dses = _repository.LoadMetaObject("DataSourceEvents") as DataSourceEvents;

            foreach (ReglamentElementMetaObject remo in reglamentElements)
            {
                DataSourceEvent dse = _repository.CreateNewMetaObject(MetaObjectType.DataSourceEvent, "") as DataSourceEvent;
                dse.SetDataSource(remo.getDataSource());
                if (remo.ReglamentElementType == "ExecETL")
                {
                    dse.EventType = "ExecETL_Timer";
                }
                else if (remo.ReglamentElementType == "CheckDS")
                {
                    dse.EventType = "CheckDS_Timer";
                }
                else
                {
                    throw new Exception("Неизвестный тип элемента регламента");
                }

                _repository.Save(dse);
                dses.AddDataSourceEvent(dse);
                events.Add(dse);

                //генерация новых элементов регламента в связи с периодичностью
                if (remo.Period.TotalSeconds > 0.1)
                {
                    remo.LastRunTime  = remo.NextRunTime;
                    remo.NextRunTime += remo.Period;
                    _repository.Save(remo);
                }
            }
            _repository.Save(dses);
            return(events);
        }