Exemplo n.º 1
0
		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;
		}
Exemplo n.º 2
0
        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();
        }