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); }
/// <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); }