public Dictionary<Property, ScheduleClass> GetSchedulesForControlledObjects(List<Property> controlledObjects) { var res = new Dictionary<Property, ScheduleClass>(); foreach (var controlledObject in controlledObjects) { foreach (var scheduleClass in Schedules) { if (scheduleClass.ControlledObjects.Contains(controlledObject)) { if (!res.ContainsKey(controlledObject)) res.Add(controlledObject, scheduleClass); break; } } if (!res.ContainsKey(controlledObject)) res.Add(controlledObject, new ScheduleClass(true)); } return res; }
public DataManager(IUnityContainer container) { // подписываемся на событие обновления планов через редактор var eventAggregator = container.Resolve<EventAggregator>(); var eve = eventAggregator.GetEvent<PlansModifiedEvent>(); eve.Subscribe(OnPlansModified); // инициализируем переменные _addresses = new Dictionary<string, List<Property>>(); _planObjects = new Dictionary<int, BaseObject>(); _providers = new List<IDataProvider>(); _changedValues = new List<BaseObject>(); _pushValuesToClientTimer = new Timer(PushValuesInterval) { AutoReset = true }; _pushValuesToClientTimer.Elapsed += PushValuesToClientTimerOnElapsed; using (var plansDb = new PlansDc(_esterConnectionString)) { // получаем необходимые значения из бд _rootObjects = plansDb.PlanObjects.Where(po => po.Parent == null).Select(p => ServerExtensions.FromDbObject(p)).ToList(); foreach (var group in plansDb.Properties.GroupBy(g => g.Path)) _addresses.Add(group.Key, group.ToList()); } FillPlanObjects(_planObjects, _rootObjects); // Регистрируем все имеющиеся провайдеры данных RegisterDataProviders(); // формируем конфигурацию для провайдеров данных var config = new Dictionary<string, object> { { "ConfigSource", new XmlConfigSource(Path.Combine(HttpRuntime.AppDomainAppPath, @"Resources\ServerConfig.xml")) { AutoSave = true } }, { "Addresses", _addresses.Keys.ToList() } }; // инициализируем провайдеры foreach (var dataProvider in _providers) { dataProvider.DataProviderInitializedEvent += OnDataProviderInitializedEvent; dataProvider.Initialize(config); } // запускаем таймер _pushValuesToClientTimer.Start(); }