public void AircraftListJson_Constructor_Initialises_To_Known_State_And_Properties_Work() { var aircraftListJson = new AircraftListJson(); Assert.AreEqual(0, aircraftListJson.Aircraft.Count); TestUtilities.TestProperty(aircraftListJson, "AvailableAircraft", 0, 12); TestUtilities.TestProperty(aircraftListJson, "FlagHeight", 0, 19); TestUtilities.TestProperty(aircraftListJson, "FlagWidth", 0, 132); TestUtilities.TestProperty(aircraftListJson, "LastDataVersion", null, "192"); TestUtilities.TestProperty(aircraftListJson, "ServerTime", 0L, 900L); TestUtilities.TestProperty(aircraftListJson, "ShortTrailLengthSeconds", 0, 89); TestUtilities.TestProperty(aircraftListJson, "ShowFlags", false); TestUtilities.TestProperty(aircraftListJson, "ShowPictures", false); TestUtilities.TestProperty(aircraftListJson, "ShowSilhouettes", false); TestUtilities.TestProperty(aircraftListJson, "Source", 0, 3); }
/// <summary> /// Returns a fully-formed <see cref="AircraftListJson"/> from the aircraft list passed across. /// </summary> /// <param name="args"></param> /// <returns></returns> public AircraftListJson Build(AircraftListJsonBuilderArgs args) { if(args == null) throw new ArgumentNullException("aircraftList"); if(args.AircraftList == null) throw new InvalidOperationException("The AircraftList must be supplied"); var result = new AircraftListJson() { FlagHeight = 20, FlagWidth = 85, ShowFlags = _ShowFlags && !args.IsFlightSimulatorList, ShowPictures = _ShowPictures && (!args.IsInternetClient || _ShowPicturesToInternetClients) && !args.IsFlightSimulatorList, ShowSilhouettes = _ShowSilhouettes && !args.IsFlightSimulatorList, ShortTrailLengthSeconds = _ShortTrailLength, Source = (int)args.AircraftList.Source, }; long timestamp, dataVersion; var aircraft = args.AircraftList.TakeSnapshot(out timestamp, out dataVersion); result.AvailableAircraft = aircraft.Count; result.LastDataVersion = dataVersion.ToString(); result.ServerTime = JavascriptHelper.ToJavascriptTicks(timestamp); Dictionary<int, double?> distances = new Dictionary<int,double?>(); aircraft = FilterAircraft(aircraft, args, ref distances); SortAircraft(aircraft, args, distances); CopyAircraft(result, aircraft, args, distances); return result; }
/// <summary> /// Copies the aircraft from the snapshot to the JSON object. /// </summary> /// <param name="aircraftListJson"></param> /// <param name="aircraftListSnapshot"></param> /// <param name="args"></param> /// <param name="distances"></param> private void CopyAircraft(AircraftListJson aircraftListJson, List<IAircraft> aircraftListSnapshot, AircraftListJsonBuilderArgs args, Dictionary<int, double?> distances) { var now = _Provider.UtcNow; foreach(var aircraftSnapshot in aircraftListSnapshot) { double? distance; if(!distances.TryGetValue(aircraftSnapshot.UniqueId, out distance)) distance = null; var aircraftJson = new AircraftJson() { BearingFromHere = GreatCircleMaths.Bearing(args.BrowserLatitude, args.BrowserLongitude, aircraftSnapshot.Latitude, aircraftSnapshot.Longitude, null, false, true), DistanceFromHere = distance == null ? (double?)null : Math.Round(distance.Value, 2), UniqueId = aircraftSnapshot.UniqueId, }; if(aircraftJson.BearingFromHere != null) aircraftJson.BearingFromHere = Math.Round(aircraftJson.BearingFromHere.Value, 1); bool firstTimeSeen = !args.PreviousAircraft.Contains(aircraftSnapshot.UniqueId); if(firstTimeSeen || aircraftSnapshot.AltitudeChanged > args.PreviousDataVersion) aircraftJson.Altitude = aircraftSnapshot.Altitude; if(firstTimeSeen || aircraftSnapshot.CallsignChanged > args.PreviousDataVersion) aircraftJson.Callsign = aircraftSnapshot.Callsign; if(firstTimeSeen || aircraftSnapshot.CallsignIsSuspectChanged > args.PreviousDataVersion) aircraftJson.CallsignIsSuspect = aircraftSnapshot.CallsignIsSuspect; if(firstTimeSeen || aircraftSnapshot.ConstructionNumberChanged > args.PreviousDataVersion) aircraftJson.ConstructionNumber = aircraftSnapshot.ConstructionNumber; if(firstTimeSeen || aircraftSnapshot.CountMessagesReceivedChanged > args.PreviousDataVersion) aircraftJson.CountMessagesReceived = aircraftSnapshot.CountMessagesReceived; if(firstTimeSeen || aircraftSnapshot.DestinationChanged > args.PreviousDataVersion) aircraftJson.Destination = aircraftSnapshot.Destination; if(firstTimeSeen || aircraftSnapshot.GroundSpeedChanged > args.PreviousDataVersion) aircraftJson.GroundSpeed = Round.GroundSpeed(aircraftSnapshot.GroundSpeed); if(firstTimeSeen || aircraftSnapshot.EmergencyChanged > args.PreviousDataVersion) aircraftJson.Emergency = aircraftSnapshot.Emergency; if(firstTimeSeen || aircraftSnapshot.EngineTypeChanged > args.PreviousDataVersion) aircraftJson.EngineType = (int)aircraftSnapshot.EngineType; if(firstTimeSeen || aircraftSnapshot.FirstSeenChanged > args.PreviousDataVersion) aircraftJson.FirstSeen = aircraftSnapshot.FirstSeen; if(firstTimeSeen || aircraftSnapshot.FlightsCountChanged > args.PreviousDataVersion) aircraftJson.FlightsCount = aircraftSnapshot.FlightsCount; if(firstTimeSeen || aircraftSnapshot.PictureFileNameChanged > args.PreviousDataVersion) aircraftJson.HasPicture = !String.IsNullOrEmpty(aircraftSnapshot.PictureFileName); if(firstTimeSeen || aircraftSnapshot.Icao24Changed > args.PreviousDataVersion) aircraftJson.Icao24 = aircraftSnapshot.Icao24; if(firstTimeSeen || aircraftSnapshot.Icao24CountryChanged > args.PreviousDataVersion) aircraftJson.Icao24Country = aircraftSnapshot.Icao24Country; if(firstTimeSeen || aircraftSnapshot.Icao24InvalidChanged > args.PreviousDataVersion) aircraftJson.Icao24Invalid = aircraftSnapshot.Icao24Invalid; if(firstTimeSeen || aircraftSnapshot.IsMilitaryChanged > args.PreviousDataVersion) aircraftJson.IsMilitary = aircraftSnapshot.IsMilitary; if(firstTimeSeen || aircraftSnapshot.IsInterestingChanged > args.PreviousDataVersion) aircraftJson.IsInteresting = aircraftSnapshot.IsInteresting; if(firstTimeSeen || aircraftSnapshot.LatitudeChanged > args.PreviousDataVersion) aircraftJson.Latitude = Round.Coordinate(aircraftSnapshot.Latitude); if(firstTimeSeen || aircraftSnapshot.LongitudeChanged > args.PreviousDataVersion) aircraftJson.Longitude = Round.Coordinate(aircraftSnapshot.Longitude); if(firstTimeSeen || aircraftSnapshot.ModelChanged > args.PreviousDataVersion) aircraftJson.Model = aircraftSnapshot.Model; if(firstTimeSeen || aircraftSnapshot.NumberOfEnginesChanged > args.PreviousDataVersion) aircraftJson.NumberOfEngines = aircraftSnapshot.NumberOfEngines; if(firstTimeSeen || aircraftSnapshot.OnGroundChanged > args.PreviousDataVersion) aircraftJson.OnGround = aircraftSnapshot.OnGround; if(firstTimeSeen || aircraftSnapshot.OperatorChanged > args.PreviousDataVersion) aircraftJson.Operator = aircraftSnapshot.Operator; if(firstTimeSeen || aircraftSnapshot.OperatorIcaoChanged > args.PreviousDataVersion) aircraftJson.OperatorIcao = aircraftSnapshot.OperatorIcao; if(firstTimeSeen || aircraftSnapshot.OriginChanged > args.PreviousDataVersion) aircraftJson.Origin = aircraftSnapshot.Origin; if(firstTimeSeen || aircraftSnapshot.PositionTimeChanged > args.PreviousDataVersion) aircraftJson.PositionTime = aircraftSnapshot.PositionTime == null ? (long?)null : JavascriptHelper.ToJavascriptTicks(aircraftSnapshot.PositionTime.Value); if(firstTimeSeen || aircraftSnapshot.RegistrationChanged > args.PreviousDataVersion) aircraftJson.Registration = aircraftSnapshot.Registration; if(firstTimeSeen || aircraftSnapshot.SpeciesChanged > args.PreviousDataVersion) aircraftJson.Species = (int)aircraftSnapshot.Species; if(firstTimeSeen || aircraftSnapshot.SpeedTypeChanged > args.PreviousDataVersion) aircraftJson.SpeedType = (int)aircraftSnapshot.SpeedType; if(firstTimeSeen || aircraftSnapshot.SquawkChanged > args.PreviousDataVersion) aircraftJson.Squawk = String.Format("{0:0000}", aircraftSnapshot.Squawk); if(firstTimeSeen || aircraftSnapshot.TrackChanged > args.PreviousDataVersion) aircraftJson.Track = Round.Track(aircraftSnapshot.Track); if(firstTimeSeen || aircraftSnapshot.TypeChanged > args.PreviousDataVersion) aircraftJson.Type = aircraftSnapshot.Type; if(firstTimeSeen || aircraftSnapshot.UserTagChanged > args.PreviousDataVersion) aircraftJson.UserTag = aircraftSnapshot.UserTag; if(firstTimeSeen || aircraftSnapshot.VerticalRateChanged > args.PreviousDataVersion) aircraftJson.VerticalRate = aircraftSnapshot.VerticalRate; if(firstTimeSeen || aircraftSnapshot.WakeTurbulenceCategoryChanged > args.PreviousDataVersion) aircraftJson.WakeTurbulenceCategory = (int)aircraftSnapshot.WakeTurbulenceCategory; if(aircraftSnapshot.Stopovers.Count > 0 && (firstTimeSeen || aircraftSnapshot.StopoversChanged > args.PreviousDataVersion)) { aircraftJson.Stopovers = new List<string>(); aircraftJson.Stopovers.AddRange(aircraftSnapshot.Stopovers); } aircraftJson.SecondsTracked = (long)((now - aircraftSnapshot.FirstSeen).TotalSeconds); if(args.ShowShortTrail) { if(aircraftSnapshot.ShortCoordinates.Count > 0) { BuildCoordinatesList(true, firstTimeSeen, aircraftJson, aircraftSnapshot, args); } } else { if(aircraftSnapshot.FullCoordinates.Count > 0) { BuildCoordinatesList(false, firstTimeSeen, aircraftJson, aircraftSnapshot, args); } } aircraftListJson.Aircraft.Add(aircraftJson); } }