Ejemplo n.º 1
0
 private void EnsureStationHasTrack(Train train) {
     foreach (var track in train.Tracks) {
         var t = track;
         if (!Layout.HasTrack(t))
             throw new TimetableException(string.Format(CultureInfo.CurrentCulture, Properties.Resources.TrackInStationReferredInTrainIsNotInLayout, track, track.Station, train));
     }
 }
Ejemplo n.º 2
0
 public void Add(Train train) {
     if (train == null) throw new ArgumentNullException(nameof(train));
     train.Verify();
     EnsureStationHasTrack(train);
     CreateTimetableLinks(train);
     _trains.Add(train);
 }
Ejemplo n.º 3
0
 private void CreateTimetableLinks(Train train) {
     var calls = train.Calls.ToArray();
     for (var i =0; i < (calls.Count() - 1); i++) {
         var j = i + 1;
         var from = calls[i].Track.Station;
         var to = calls[j].Track.Station;
         if (! from.Equals(to)) {
             var trackLink = Layout.TrackStretch(from, to);
             trackLink.Add(new StretchPassing(calls[i], calls[j]));
         }
     }
 }
Ejemplo n.º 4
0
 public static void RecordHandler(IDataRecord record, Timetable timetable)
 {
     Train currentTrain = null;
     var key = Thread.CurrentThread.ManagedThreadId;
     if (CachedTrains.ContainsKey(key))
     {
         currentTrain = CachedTrains[key];
     }
     var identity = record.GetString(record.GetOrdinal("TrainNumber"));
     var category = GetCategory(record.GetString(record.GetOrdinal("Product")));
     if (currentTrain == null)
     {
         currentTrain = new Train(category, identity);
         CachedTrains[key] = currentTrain;
     }
     if (currentTrain.Identity != identity)
     {
         timetable.Add(currentTrain);
         currentTrain = new Train(category, identity);
         CachedTrains[key] = currentTrain;
     }
     currentTrain.Add(GetCall(record, timetable));
 }
        private static void GetTrains(Timetable timetable, Excel.Workbook book) {
            Excel.Worksheet sheet = book.Worksheets["Trains"];
            var r = 2;
            Train current = null;
            while (true) {
                var row = (Array)sheet.get_Range(Cell("A", r), Cell("K", r)).Cells.Value;
                if (row.GetValue(1, 1) == null) {
                    break;
                }
                else {
                    var type = row.Value(9).ToLowerInvariant();
                    switch (type) {
                        case "traindef":
                            if (current != null) timetable.Add(current);
                            var number = row.Value(10);
                            current = new Train(GetCategory(number.Substring(0, 1)), number);
                            break;
                        case "timetable":
                           try {
                            var track = timetable.Layout.Station(row.Value(3))[row.Value(4)];
                            current.Add(new StationCall(track,  Time.Parse(row.Value(5)), Time.Parse(row.Value(6))));
               
                            }
                            catch (Exception) {
                                Debugger.Break();
                                throw;
                            }
                            break;
                        default:
                            break;
                    }
                }
                r++;
            }
            if (current != null) timetable.Add(current);

        }