private void __RefreshLiveSchedules(TrainInformation Train, ESTW estw) { lock (Train.LockSchedules) { var OldSchedules = Train.Schedules.ToList(); Train.TruncateSchedules(); var SchedulesResult = CalculationBLL.GetSchedulesByTime(Train.Train.Schedules, estw.Time); ValidateResult(SchedulesResult); foreach (var Schedule in SchedulesResult.Result) { var LiveSchedule = OldSchedules.FirstOrDefault(s => s.Schedule.Station.ESTW.Id == Schedule.Station.ESTW.Id && s.Schedule.Station.ShortSymbol == Schedule.Station.ShortSymbol && s.Schedule.Time == Schedule.Time); if (LiveSchedule == null) { LiveSchedule = new LiveSchedule(Train, Schedule); } else { OldSchedules.Remove(LiveSchedule); } Train.AddSchedule(LiveSchedule); } foreach (var OldSchedule in OldSchedules) { Train.AddSchedule(OldSchedule); } } }
private TrainInformation __CreateLiveTrainInformation(int trainNumber, ESTW estw) { if (estw.Area.Trains.ContainsKey(trainNumber)) { var Train = estw.Area.Trains[trainNumber]; var Result = new TrainInformation(Train); var SchedulesResult = CalculationBLL.GetSchedulesByTime(Train.Schedules, estw.Time); ValidateResult(SchedulesResult); foreach (var Schedule in SchedulesResult.Result) { var LiveSchedule = new LiveSchedule(Result, Schedule); Result.AddSchedule(LiveSchedule); } // Don't validate result here. When this fails, it's not so dramatic... var prevResult = CalculationBLL.GetPreviousService(Train, estw); if (prevResult.Succeeded) { Result.PreviousService = prevResult.Result; } var followUpResult = CalculationBLL.GetFollowUpService(Train, estw); if (followUpResult.Succeeded) { Result.FollowUpService = followUpResult.Result; } return(Result); } else { var Train = estw.Area.Trains.GetOrAdd(trainNumber, new Train(trainNumber)); return(new TrainInformation(Train)); } }
private TrainInformation __CreateLiveTrainInformation(int trainNumber, ESTW estw) { if (estw.Area.Trains.ContainsKey(trainNumber)) { var Train = estw.Area.Trains[trainNumber]; var Result = new TrainInformation(Train); var SchedulesResult = CalculationBLL.GetSchedulesByTime(Train.Schedules, estw.Time); ValidateResult(SchedulesResult); foreach (var Schedule in SchedulesResult.Result) { var LiveSchedule = new LiveSchedule(Result, Schedule); Result.AddSchedule(LiveSchedule); } return(Result); } else { var Train = new Train(trainNumber); return(new TrainInformation(Train)); } }