void Verbindung_registrieren(Verbindung verbindung, Action<Verbindung[]> onEndOfStream) { if (verbindung != null) _verbindungen.Add(verbindung); else { var tmp = _verbindungen; _verbindungen = null; onEndOfStream(tmp.ToArray()); } }
public void Verbindungen_bewerten(Verbindung verbindung) { Verbindung_registrieren(verbindung, Auswerten); }
/// <summary> /// Erzeugt die Verbindungen aus den gegebenen Pfaden. /// </summary> /// <param name="pfad"> /// The pfad. /// </param> /// <returns> /// The <see cref="Verbindung"/>. /// </returns> internal IEnumerable<Verbindung> Verbindungenerzeugen(Pfad pfad) { var linienName = pfad.Strecken.First().Linienname; var startHalteStelle = pfad.Starthaltestellenname; var abfahrtszeiten = this.fahrplanProvider.Abfahrtszeiten_bei_Haltestelle(linienName, startHalteStelle); foreach (var zeit in abfahrtszeiten) { var verbindung = new Verbindung { Pfad = pfad, Fahrtzeiten = new Fahrtzeit[pfad.Strecken.Length] }; for (int i = 0; i < pfad.Strecken.Length; i++) { verbindung.Fahrtzeiten[i] = new Fahrtzeit(); } // Startzeit der Verbindung ist nur hier bekannt verbindung.Fahrtzeiten[0].Abfahrtszeit = zeit; yield return verbindung; } }
/// <summary> /// Ordnet den Verbindungen die Fahrzeiten zu. /// </summary> /// <param name="verbindung"> /// The verbindungen. /// </param> /// <returns> /// The <see cref="Verbindung"/>. /// </returns> internal Verbindung FahrzeitenZuordnen(Verbindung verbindung) { // Init var startHalteStelle = verbindung.Pfad.Starthaltestellenname; var ankunftzeitLetzteStrecke = verbindung.Fahrtzeiten[0].Abfahrtszeit; var gueltigeVerbindung = false; for (var i = 0; i < verbindung.Pfad.Strecken.Length; i++) { var linienName = verbindung.Pfad.Strecken[i].Linienname; // Alle Zeiten an dieser Haltestelle var startZeitenHalteStelle = this.fahrplanProvider.Abfahrtszeiten_bei_Haltestelle( linienName, startHalteStelle); // Nehme die nächste verfügbare Abfahrtszeit // Rollator use case wird nicht berücksichtigt foreach (var dateTime in startZeitenHalteStelle) { if (dateTime < ankunftzeitLetzteStrecke) { continue; } verbindung.Fahrtzeiten[i].Abfahrtszeit = dateTime; gueltigeVerbindung = true; break; } if (!gueltigeVerbindung) { return null; } // Frage den Fahrplan über die Dauer der Strecke var dauer = this.fahrplanProvider.Fahrtdauer_für_Strecke(linienName, startHalteStelle); // Ankunftszeit verbindung.Fahrtzeiten[i].Ankunftszeit = verbindung.Fahrtzeiten[i].Abfahrtszeit + dauer; // Merke für nächste Runde startHalteStelle = verbindung.Pfad.Strecken[i].Zielhaltestellenname; ankunftzeitLetzteStrecke = verbindung.Fahrtzeiten[i].Ankunftszeit; } return verbindung; }
/// <summary> /// Schraenkt die gegebenen Verbindungen nach fahrzeit ein. /// </summary> /// <param name="verbindung"> /// Die verbindungen. /// </param> /// <param name="startZeit"> /// Die start zeit. /// </param> /// <returns> /// The <see cref="Verbindung"/>. /// </returns> internal Verbindung EinschraenkenNachFahrzeit(Verbindung verbindung, DateTime startZeit) { return verbindung.Fahrtzeiten[0].Abfahrtszeit >= startZeit ? verbindung : null; }
/// <summary> /// Action für die Resultate. Die Verbindung wird in die Resultatliste eingetragen /// </summary> /// <param name="v">Die Verbindung</param> private void MerkeVerbindungInListe(Verbindung v) { this.results.Add(v); }