public VehicleDetail?GetVehicleDetails(RealTimeArrival arrival) { if (arrival.Route == LinkRouteId) { return(GetLinkVehicleDetails(arrival)); } VehicleDetail result; foreach (var group in VehicleGroups) { if (group.TryGetVehicleDetails(arrival, out result)) { return(result); } } if (arrival.Vehicle != null) { result = new VehicleDetail(); string[] parts = arrival.Vehicle.Split('_'); if (parts.Length == 2) { int prefix; int postfix; if (int.TryParse(parts[0], out prefix) && int.TryParse(parts[1], out postfix)) { switch (prefix) { case 1: result.AgencyFunded = result.AgencyOperated = "King County Metro"; break; case 40: result.AgencyFunded = "Sound Transit"; result.AgencyOperated = "Unknown"; break; } result.VehicleNumber = postfix.ToString(); result.VehicleName = "Unknown"; result.SeatedCapacity = "Unknown"; return(result); } } } return(null); }
public static async Task <RetrievedData <IEnumerable <RealTimeArrival> > > GetRealTimeArrivalsForStopAsync(string stopId, int minsBefore, int minsAfter, DataSourcePreference preference, CancellationToken cancellationToken) { IEnumerable <RealTimeArrival> resultArrivals = null; List <string> resultErrors = new List <string>(); List <Exception> resultExceptions = new List <Exception>(); foreach (var source in Sources) { if (!source.IsQualified(preference)) { continue; } if (source.CanGetRealTimeArrivalsForStop) { var sResult = await source.GetRealTimeArrivalsForStop(stopId, minsBefore, minsAfter, cancellationToken); if (sResult.HasData) { if (resultArrivals == null) { resultArrivals = sResult.Data; } else { resultArrivals = resultArrivals.Union(sResult.Data); } } if (sResult.ErrorMessage != null) { resultErrors.Add(sResult.ErrorMessage); } if (sResult.CaughtException != null) { resultExceptions.Add(sResult.CaughtException); } } } if (resultArrivals == null) { resultArrivals = new RealTimeArrival[] { } } ; return(new RetrievedData <IEnumerable <RealTimeArrival> >(resultArrivals, resultErrors.Count == 0 ? null : resultErrors.Aggregate("", (acc, err) => (acc == "" ? "" : ", ") + err), resultExceptions.Count == 0 ? null : new AggregateException(resultExceptions))); }
private VehicleDetail GetLinkVehicleDetails(RealTimeArrival arrival) { var day = arrival.ScheduledArrivalTime?.GetServiceDay(); bool threeCars = false; if (day.HasValue && (day.Value == ServiceDay.Saturday || day.Value == ServiceDay.Sunday)) { threeCars = true; } else if (ThreeCarLinkTrips.Contains(arrival.Trip)) { threeCars = true; } VehicleDetail result = new VehicleDetail() { AgencyFunded = "Sound Transit", AgencyOperated = "King County Metro", SeatedCapacity = "Unknown", VehicleName = (threeCars ? "3" : "2") + " Car Link Train", VehicleNumber = "Unknown" }; result.ImageUri = new Uri(threeCars ? "http://ww2.hdnux.com/photos/03/71/66/1023397/4/628x471.jpg" : "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/2-car_Central_Link_train_in_Tukwila.jpg/320px-2-car_Central_Link_train_in_Tukwila.jpg"); return(result); }
public bool TryGetVehicleDetails(RealTimeArrival arrival, out VehicleDetail detail) { detail = new VehicleDetail(); if (arrival.Vehicle != null) { string[] parts = arrival.Vehicle.Split('_'); if (parts.Length == 2) { int prefix; int postfix; if (int.TryParse(parts[0], out prefix) && int.TryParse(parts[1], out postfix) && ((NumberPrefix == prefix && NumberMin <= postfix && NumberMax >= postfix && !(ExcludedNumbers?.Contains(postfix) ?? false)) || (IncludedNumbers?.Contains(postfix) ?? false))) { detail.AgencyFunded = FundedBy; detail.AgencyOperated = OperatedBy; detail.VehicleName = Name; detail.SeatedCapacity = Capacity.ToString(); detail.ImageUri = new Uri(Image); detail.VehicleNumber = postfix.ToString(); return true; } } } return false; }
public bool TryGetVehicleDetails(RealTimeArrival arrival, out VehicleDetail detail) { detail = new VehicleDetail(); if (arrival.Vehicle != null) { string[] parts = arrival.Vehicle.Split('_'); if (parts.Length == 2) { int prefix; int postfix; if (int.TryParse(parts[0], out prefix) && int.TryParse(parts[1], out postfix) && ((NumberPrefix == prefix && NumberMin <= postfix && NumberMax >= postfix && !(ExcludedNumbers?.Contains(postfix) ?? false)) || (IncludedNumbers?.Contains(postfix) ?? false))) { detail.AgencyFunded = FundedBy; detail.AgencyOperated = OperatedBy; detail.VehicleName = Name; detail.SeatedCapacity = Capacity.ToString(); detail.ImageUri = new Uri(Image); detail.VehicleNumber = postfix.ToString(); return(true); } } } return(false); }
public override Task <RetrievedData <RealTimeArrival> > CorrectRealTimeArrival(RealTimeArrival arrival, CancellationToken cancellationToken) { throw new NotImplementedException(); }
public abstract Task<RetrievedData<RealTimeArrival>> CorrectRealTimeArrival(RealTimeArrival arrival, CancellationToken cancellationToken);
public static async Task<RetrievedData<IEnumerable<RealTimeArrival>>> GetRealTimeArrivalsForStopAsync(string stopId, int minsBefore, int minsAfter, DataSourcePreference preference, CancellationToken cancellationToken) { IEnumerable<RealTimeArrival> resultArrivals = null; List<string> resultErrors = new List<string>(); List<Exception> resultExceptions = new List<Exception>(); foreach (var source in Sources) { if (!source.IsQualified(preference)) continue; if (source.CanGetRealTimeArrivalsForStop) { var sResult = await source.GetRealTimeArrivalsForStop(stopId, minsBefore, minsAfter, cancellationToken); if (sResult.HasData) { if (resultArrivals == null) resultArrivals = sResult.Data; else resultArrivals = resultArrivals.Union(sResult.Data); } if (sResult.ErrorMessage != null) resultErrors.Add(sResult.ErrorMessage); if (sResult.CaughtException != null) resultExceptions.Add(sResult.CaughtException); } } if (resultArrivals == null) resultArrivals = new RealTimeArrival[] { }; return new RetrievedData<IEnumerable<RealTimeArrival>>(resultArrivals, resultErrors.Count == 0 ? null : resultErrors.Aggregate("", (acc, err) => (acc == "" ? "" : ", ") + err), resultExceptions.Count == 0 ? null : new AggregateException(resultExceptions)); }
public override Task<RetrievedData<RealTimeArrival>> CorrectRealTimeArrival(RealTimeArrival arrival, CancellationToken cancellationToken) { throw new NotImplementedException(); }
public VehicleDetail? GetVehicleDetails(RealTimeArrival arrival) { if (arrival.Route == LinkRouteId) return GetLinkVehicleDetails(arrival); VehicleDetail result; foreach (var group in VehicleGroups) { if (group.TryGetVehicleDetails(arrival, out result)) return result; } if (arrival.Vehicle != null) { result = new VehicleDetail(); string[] parts = arrival.Vehicle.Split('_'); if (parts.Length == 2) { int prefix; int postfix; if (int.TryParse(parts[0], out prefix) && int.TryParse(parts[1], out postfix)) { switch (prefix) { case 1: result.AgencyFunded = result.AgencyOperated = "King County Metro"; break; case 40: result.AgencyFunded = "Sound Transit"; result.AgencyOperated = "Unknown"; break; } result.VehicleNumber = postfix.ToString(); result.VehicleName = "Unknown"; result.SeatedCapacity = "Unknown"; return result; } } } return null; }
private VehicleDetail GetLinkVehicleDetails(RealTimeArrival arrival) { var day = arrival.ScheduledArrivalTime?.GetServiceDay(); bool threeCars = false; if (day.HasValue && (day.Value == ServiceDay.Saturday || day.Value == ServiceDay.Sunday)) threeCars = true; else if (ThreeCarLinkTrips.Contains(arrival.Trip)) threeCars = true; VehicleDetail result = new VehicleDetail() { AgencyFunded = "Sound Transit", AgencyOperated = "King County Metro", SeatedCapacity = "Unknown", VehicleName = (threeCars ? "3" : "2") + " Car Link Train", VehicleNumber = "Unknown" }; result.ImageUri = new Uri(threeCars ? "http://ww2.hdnux.com/photos/03/71/66/1023397/4/628x471.jpg" : "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/2-car_Central_Link_train_in_Tukwila.jpg/320px-2-car_Central_Link_train_in_Tukwila.jpg"); return result; }
public override Task <RetrievedData <RealTimeArrival> > CorrectRealTimeArrival(RealTimeArrival arrival, CancellationToken cancellationToken) { //Does nothing; return(Task.FromResult(new RetrievedData <RealTimeArrival>(arrival))); }
private bool RemoveVehicle(RealTimeArrival arrival) { var key = new Tuple<string, string>(arrival.Stop, arrival.Trip); if (VehicleWrappers.ContainsKey(key)) { var tviw = VehicleWrappers[key]; MapElementsShown.Remove(tviw.Element); VehicleWrappers.Remove(key); return true; } return false; }
private void SetVehicle(RealTimeArrival arrival) { var key = new Tuple<string, string>(arrival.Stop, arrival.Trip); if (VehicleWrappers.ContainsKey(key)) { var tviw = VehicleWrappers[key]; tviw.Arrival = arrival; VehicleWrappers[key] = tviw; } else { TransitVehicleIconWrapper tviw = new TransitVehicleIconWrapper(); tviw.Arrival = arrival; MapElementsShown.Add(tviw.Element); VehicleWrappers.Add(key, tviw); } }
public abstract Task <RetrievedData <RealTimeArrival> > CorrectRealTimeArrival(RealTimeArrival arrival, CancellationToken cancellationToken);