private SearchResultConnection GiveDirectConnectionWitMaxWaitingTime(List<LineForSpecifiedDayType> allSpecifiedLines, SoughtConnection soughtConnection, TimeOfArrival maxWaitingTime) { SearchResultConnection foundConnection = null; TimeOfArrival soughConnectionTimeOfArrival = new TimeOfArrival(soughtConnection.DateAndTime.Hour, soughtConnection.DateAndTime.Minute); foreach (LineForSpecifiedDayType line in allSpecifiedLines) { foreach (Track track in line.TracksForSpecifiedDayType) { try { if (track.TimeOfArrivalOnBusStops.Count < 2) { continue; } if (soughtConnection.IsDeparture) { if (track.TimeOfArrivalOnBusStops.Last().Value - soughConnectionTimeOfArrival > MAX_LENGTH_OF_TRACK || (track.TimeOfArrivalOnBusStops.First().Value - soughConnectionTimeOfArrival > MAX_WAITING_TIME_FOR_START_BUS_FOR_DEPARTUE_OR_FOR_END_BUS_FOR_ARRIVAL && soughConnectionTimeOfArrival - track.TimeOfArrivalOnBusStops.First().Value > MAX_LENGTH_OF_TRACK)) { continue; } } else { if (soughConnectionTimeOfArrival - track.TimeOfArrivalOnBusStops.First().Value > MAX_LENGTH_OF_TRACK || (soughConnectionTimeOfArrival - track.TimeOfArrivalOnBusStops.Last().Value > MAX_WAITING_TIME_FOR_START_BUS_FOR_DEPARTUE_OR_FOR_END_BUS_FOR_ARRIVAL && track.TimeOfArrivalOnBusStops.Last().Value - soughConnectionTimeOfArrival > MAX_LENGTH_OF_TRACK)) { continue; } } TimeOfArrival startBusStopTimeOfArrival = track.TimeOfArrivalOnBusStops[soughtConnection.StartBusStop]; TimeOfArrival endBusStopTimeOfArrival = track.TimeOfArrivalOnBusStops[soughtConnection.EndBusStop]; if (soughtConnection.IsDeparture) { if (startBusStopTimeOfArrival - soughConnectionTimeOfArrival > maxWaitingTime) { continue; } } else { if (soughConnectionTimeOfArrival - endBusStopTimeOfArrival > maxWaitingTime) { continue; } } TimeOfArrival timeDistanceBetweenStartAndEndBusStop = endBusStopTimeOfArrival - startBusStopTimeOfArrival; if (timeDistanceBetweenStartAndEndBusStop > new TimeOfArrival(4, 0)) { continue; } DateTime startBusStopDateTime = new DateTime(); DateTime endBusStopDateTime = new DateTime(); if (endBusStopTimeOfArrival >= startBusStopTimeOfArrival) { // the same dates startBusStopDateTime = new DateTime(soughtConnection.DateAndTime.Year, soughtConnection.DateAndTime.Month, soughtConnection.DateAndTime.Day, startBusStopTimeOfArrival.Hour, startBusStopTimeOfArrival.Minutes, 0); endBusStopDateTime = new DateTime(soughtConnection.DateAndTime.Year, soughtConnection.DateAndTime.Month, soughtConnection.DateAndTime.Day, endBusStopTimeOfArrival.Hour, endBusStopTimeOfArrival.Minutes, 0); } else { // end date is one day after start date startBusStopDateTime = new DateTime(soughtConnection.DateAndTime.Year, soughtConnection.DateAndTime.Month, soughtConnection.DateAndTime.Day, startBusStopTimeOfArrival.Hour, startBusStopTimeOfArrival.Minutes, 0); DateTime dayAfterDayInSoughtConnection = soughtConnection.DateAndTime.AddDays(1); endBusStopDateTime = new DateTime(dayAfterDayInSoughtConnection.Year, dayAfterDayInSoughtConnection.Month, dayAfterDayInSoughtConnection.Day, endBusStopTimeOfArrival.Hour, endBusStopTimeOfArrival.Minutes, 0); } TimeOfArrival timeSpecifiedByUser = new TimeOfArrival(soughtConnection.DateAndTime.Hour, soughtConnection.DateAndTime.Minute); if (soughtConnection.IsDeparture) { if (startBusStopTimeOfArrival >= timeSpecifiedByUser) { if (foundConnection == null) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } else { TimeOfArrival foundConnectionArrivalTime = new TimeOfArrival(foundConnection.ArrivalDateTime.Hour, foundConnection.ArrivalDateTime.Minute); if (foundConnectionArrivalTime > endBusStopTimeOfArrival) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } } } } else { if (endBusStopTimeOfArrival <= timeSpecifiedByUser) { if (foundConnection == null) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } else { TimeOfArrival foundConnectionArrivalTime = new TimeOfArrival(foundConnection.ArrivalDateTime.Hour, foundConnection.ArrivalDateTime.Minute); if (foundConnectionArrivalTime < startBusStopTimeOfArrival) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } } } } } catch (Exception) { } } } return foundConnection; }
private SearchResultConnection GiveDirectConnection(List<LineForSpecifiedDayType> allSpecifiedLines, SoughtConnection soughtConnection) { SearchResultConnection foundConnection = null; foreach (LineForSpecifiedDayType line in allSpecifiedLines) { foreach (Track track in line.TracksForSpecifiedDayType) { try { TimeOfArrival startBusStopTimeOfArrival = track.TimeOfArrivalOnBusStops[soughtConnection.StartBusStop]; TimeOfArrival endBusStopTimeOfArrival = track.TimeOfArrivalOnBusStops[soughtConnection.EndBusStop]; TimeOfArrival timeDistanceBetweenStartAndEndBusStop = endBusStopTimeOfArrival - startBusStopTimeOfArrival; if (timeDistanceBetweenStartAndEndBusStop > new TimeOfArrival(8, 0)) { continue; } DateTime startBusStopDateTime = new DateTime(); DateTime endBusStopDateTime = new DateTime(); if (endBusStopTimeOfArrival >= startBusStopTimeOfArrival) { // the same dates startBusStopDateTime = new DateTime(soughtConnection.DateAndTime.Year, soughtConnection.DateAndTime.Month, soughtConnection.DateAndTime.Day, startBusStopTimeOfArrival.Hour, startBusStopTimeOfArrival.Minutes, 0); endBusStopDateTime = new DateTime(soughtConnection.DateAndTime.Year, soughtConnection.DateAndTime.Month, soughtConnection.DateAndTime.Day, endBusStopTimeOfArrival.Hour, endBusStopTimeOfArrival.Minutes, 0); } else { // end date is one day after start date startBusStopDateTime = new DateTime(soughtConnection.DateAndTime.Year, soughtConnection.DateAndTime.Month, soughtConnection.DateAndTime.Day, startBusStopTimeOfArrival.Hour, startBusStopTimeOfArrival.Minutes, 0); DateTime dayAfterDayInSoughtConnection = soughtConnection.DateAndTime.AddDays(1); endBusStopDateTime = new DateTime(dayAfterDayInSoughtConnection.Year, dayAfterDayInSoughtConnection.Month, dayAfterDayInSoughtConnection.Day, endBusStopTimeOfArrival.Hour, endBusStopTimeOfArrival.Minutes, 0); } TimeOfArrival timeSpecifiedByUser = new TimeOfArrival(soughtConnection.DateAndTime.Hour, soughtConnection.DateAndTime.Minute); if (soughtConnection.IsDeparture) { if (startBusStopTimeOfArrival >= timeSpecifiedByUser) { if (foundConnection == null) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } else { TimeOfArrival foundConnectionArrivalTime = new TimeOfArrival(foundConnection.ArrivalDateTime.Hour, foundConnection.ArrivalDateTime.Minute); if (foundConnectionArrivalTime > endBusStopTimeOfArrival) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } } } } else { if (endBusStopTimeOfArrival <= timeSpecifiedByUser) { if (foundConnection == null) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } else { TimeOfArrival foundConnectionArrivalTime = new TimeOfArrival(foundConnection.ArrivalDateTime.Hour, foundConnection.ArrivalDateTime.Minute); if (foundConnectionArrivalTime < startBusStopTimeOfArrival) { foundConnection = new SearchResultConnection(true, line.Number, startBusStopDateTime, endBusStopDateTime, timeDistanceBetweenStartAndEndBusStop, soughtConnection.StartBusStop, soughtConnection.EndBusStop); } } } } } catch (Exception) { } } } return foundConnection; }