Пример #1
0
        private void AddOrReplaceAlarms(IEnumerable <Alarm> curPlcAlarms, out List <Alarm> addedAlarms, out List <Alarm> changedAlarms)
        {
            var addedAlarmsTmp   = new List <Alarm>();
            var changedAlarmsTmp = new List <Alarm>();

            foreach (IGrouping <short, Alarm> alarmsBySource in curPlcAlarms.GroupBy(a => a.SourceControllerId))
            {
                // controller ID=0 doesn't exist --> so we don't have to search the controller tree
                if (alarmsBySource.Key != 0)
                {
                    IGrouping <short, Alarm> source = alarmsBySource;
                    RootController.VisitAndAbortOnSuccess(c => c.ChildsCollection, c => c.Id == source.Key, c =>
                    {
                        foreach (var alarm in source)
                        {
                            if (alarm.Id != INVALID_ALARMID)
                            {
                                if (c.TryAddAlarm(alarm))
                                {
                                    addedAlarmsTmp.Add(alarm);
                                }
                                else if (c.TryReplaceAlarm(alarm))
                                {
                                    changedAlarmsTmp.Add(alarm);
                                }
                            }
                        }
                    });
                }
            }

            addedAlarms   = new List <Alarm>(addedAlarmsTmp);
            changedAlarms = new List <Alarm>(changedAlarmsTmp);
        }
Пример #2
0
        /// <summary>
        /// Gets the controller with the specified <paramref name="id"/>.
        /// </summary>
        /// <param name="id">The id of the desired controller.</param>
        /// <returns>A <see cref="Controller"/> instance.</returns>
        public Controller TryGetController(int id)
        {
            Controller controller = null;

            RootController.VisitAndAbortOnSuccess(c => c.ChildsCollection, c => c.Id == id, c => controller = c);
            return(controller);
        }