/// <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); }
//методы /// <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); }