private bool IsInCloseAirspace(IFlightTrack track1, IFlightTrack track2)
        {
            var altitudeMeter          = 300;
            var horizontitalPlaneMeter = 500;

            return(CalculateHorizontialDistance(track1, track2) < 5000 && CalculateVerticalDistance(track1, track2) < altitudeMeter);
        }
Exemple #2
0
        public void SetUp()
        {
            _flightTracksUpdatedCounter    = 0;
            _enterExitEventDetectedCounter = 0;
            _enteredCounter          = 0;
            _exitedCounter           = 0;
            _enterExitEventsDetected = new List <EnterExitEvent>();

            _datasource = Substitute.For <IFlightTrackManager>();
            _datasource.FlightTracksUpdated += (sender, args) => _flightTracksUpdatedCounter++;

            _uut = new EnterExitEventDetector(_datasource);
            _uut.EnterExitEventDetected += (sender, args) => {
                _enterExitEventsDetected.Add(args.Event);
                _lastEnterExitEventDetected = args.Event;
                _enterExitEventDetectedCounter++;
                if (args.Event.Entered)
                {
                    _enteredCounter++;
                }
                else
                {
                    _exitedCounter++;
                }
            };

            _flight1 = Substitute.For <IFlightTrack>();
            _flight2 = Substitute.For <IFlightTrack>();
            _flight1.GetTag().Returns("TAG123");
            _flight1.GetLastUpdatedAt().Returns(DateTime.Now);
            _flight2.GetTag().Returns("TAG456");
            _flight2.GetLastUpdatedAt().Returns(DateTime.Now);
        }
        public void WhenRaisingTransponderDataReady_GivenFlightIsWithinAirspace_CreateFlightTrack_ThatASubscriperCanReceive(string rawData, string expTag, int expLat, int expLong, int expAlt)
        {
            // ARRANGE
            var transponderData = new List <string>();

            transponderData.Add(rawData);
            _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(true);

            IFlightTrack persistedArgs = null;

            _sut.EnteredAirspace += (sender, e) =>
            {
                persistedArgs = e.FlightTrack;
            };

            //ACT
            _fakeTransponder.TransponderDataReady += Raise.EventWith(_fakeTransponder, new RawTransponderDataEventArgs(transponderData));

            // ASSERT
            Assert.That(persistedArgs.Tag, Is.Not.Null);
            Assert.That(persistedArgs.NavigationCourse, Is.EqualTo(double.NaN));
            Assert.That(persistedArgs.Velocity, Is.EqualTo(0));
            Assert.That(persistedArgs.LatestTime, Is.Not.EqualTo(DateTime.MinValue));

            Assert.That(persistedArgs.Tag, Is.EqualTo(expTag));
            Assert.That(persistedArgs.Position.Altitude, Is.EqualTo(expAlt));
            Assert.That(persistedArgs.Position.Latitude, Is.EqualTo(expLat));
            Assert.That(persistedArgs.Position.Longitude, Is.EqualTo(expLong));
        }
Exemple #4
0
        public void SetUp()
        {
            _dataSource             = Substitute.For <IFlightTrackManager>();
            _area                   = Substitute.For <IAirspaceArea>();
            _airspaceManager        = new AirspaceManager(_dataSource, _area);
            _enterExitEventDetector = new EnterExitEventDetector(_airspaceManager);
            _uut = new EnterExitEventController(_enterExitEventDetector);

            _dataSource.FlightTracksUpdated += (o, args) => _inputEventCounter++;
            _uut.EnterExitEventsUpdated     += (o, args) =>
            {
                _lastReceivedEnterExitEvents = args.ActiveEvents;
                _outputEventCounter++;
            };

            _flight1 = Substitute.For <IFlightTrack>();
            _flight2 = Substitute.For <IFlightTrack>();
            _flight1.GetTag().Returns("TAG123");
            _flight1.GetLastUpdatedAt().Returns(DateTime.Now);
            _flight2.GetTag().Returns("TAG456");
            _flight2.GetLastUpdatedAt().Returns(DateTime.Now);

            //Use IAirspaceArea substitute to manually emulate flight airspace filtering (alt = 1 inside, alt = 0 outside)
            _area.IsInside(Arg.Any <int>(), Arg.Any <int>(), Arg.Is <int>(x => x == 1)).Returns(true);
            _area.IsInside(Arg.Any <int>(), Arg.Any <int>(), Arg.Is <int>(x => x == 0)).Returns(false);
        }
        private bool WithinTimespan(IFlightTrack track1, IFlightTrack track2)
        {
            TimeSpan interval = new TimeSpan(0, 0, 3); // 3 seconds

            if (track1.LatestTime - track2.LatestTime <= interval)
            {
                return(true);
            }
            return(false);
        }
Exemple #6
0
        public void SetUp()
        {
            _firstDataPoint  = new FTDataPoint("ASH000", 2000, 2000, 22000, _testTime);
            _secondDataPoint = new FTDataPoint("ASH000", 1850, 2000, 22000, _testTime.AddSeconds(1.00));

            _uut = new Flight(_firstDataPoint);

            //_uut.AddDataPoint(_firstDataPoint); //needed for check if velocity and course is correct set
            //_uut.AddDataPoint(_secondDataPoint);

            _testFullDataLog = new LinkedList <FTDataPoint>();
            _testFullDataLog.AddFirst(_firstDataPoint);
            _testFullDataLog.AddFirst(_secondDataPoint);
        }
 private void CheckForSeperationEvents(List <IFlightTrack> flights)
 {
     for (int i = 0; i < flights.Count; i++)
     {
         for (int j = i + 1; j < flights.Count; j++)
         {
             IFlightTrack f1 = flights[i];
             IFlightTrack f2 = flights[j];
             if (TracksConflicting(f1, f2))
             {
                 SeperationEvent detectedSeperation = new SeperationEvent(f1, f2);
                 SeperationEventDetected?.Invoke(this, new SeperationDetectedEventArgs(detectedSeperation));
             }
         }
     }
 }
        public bool TracksConflicting(IFlightTrack f1, IFlightTrack f2)
        {
            double  f1alt = f1.GetCurrentAltitude();
            double  f2alt = f2.GetCurrentAltitude();
            Vector2 f1pos = f1.GetCurrentPosition();
            Vector2 f2pos = f2.GetCurrentPosition();

            if ((Math.Abs(f1alt - f2alt) < _altitude) && Vector2.Distance(f1pos, f2pos) < _distance)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public void SetUp()
        {
            _dataSource = Substitute.For <IFlightTrackManager>();
            _dataSource.FlightTracksUpdated += (o, args) => _inputEventCounter++;
            _enterExitEventDetector          = new EnterExitEventDetector(_dataSource);
            _uut = new EnterExitEventController(_enterExitEventDetector);
            _uut.EnterExitEventsUpdated += (o, args) =>
            {
                _lastReceivedEnterExitEvents = args.ActiveEvents;
                _outputEventCounter++;
            };

            _flight1 = Substitute.For <IFlightTrack>();
            _flight2 = Substitute.For <IFlightTrack>();
            _flight1.GetTag().Returns("TAG123");
            _flight1.GetLastUpdatedAt().Returns(DateTime.Now);
            _flight2.GetTag().Returns("TAG456");
            _flight2.GetLastUpdatedAt().Returns(DateTime.Now);
        }
Exemple #10
0
        public void SetUp()
        {
            //Event Counters
            _flightTracksUpdatedEventCount = 0;
            _airspaceUpdatedEventCount     = 0;


            //Dependencies
            _datasource = Substitute.For <IFlightTrackManager>();
            _datasource.FlightTracksUpdated += (sender, args) => _flightTracksUpdatedEventCount++;
            _area = Substitute.For <IAirspaceArea>();

            _uut = new AirspaceManager(_datasource, _area);
            _uut.AirspaceContentUpdated += (sender, args) => {
                _airspaceUpdatedEventCount++;
                _airspaceUpdatedEventContent = args.AirspaceContent;
            };

            _flight1 = Substitute.For <IFlightTrack>();
            _flight2 = Substitute.For <IFlightTrack>();
        }
Exemple #11
0
        public void SetUp()
        {
            _flightTracksUpdatedCounter = 0;

            _flight1a = Substitute.For <IFlightTrack>();
            _flight1b = Substitute.For <IFlightTrack>();
            _flight1c = Substitute.For <IFlightTrack>();
            _flight2a = Substitute.For <IFlightTrack>();
            _flight2b = Substitute.For <IFlightTrack>();
            _flight2c = Substitute.For <IFlightTrack>();

            _datasource = Substitute.For <IFlightTrackManager>();
            _datasource.FlightTracksUpdated += (sender, args) => _flightTracksUpdatedCounter++;

            _uut = new SeperationEventDetector(_datasource);
            _uut.SeperationEventDetected += (sender, args) =>
            {
                _lastDetectedSeperationEvent = args.DetectedEvent;
                _SeperationEventCount++;
            };
        }
Exemple #12
0
        public void Not_RenderAnyTracksOutsideTheMonitoredAirSpace()
        {
            _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(true);

            var record = new FlightRecord()
            {
                Tag       = "test flight",
                Position  = new Position(0, 0, 0),
                Timestamp = DateTime.MinValue
            };

            _fakeFlight.FlightRecordReceived += Raise.EventWith(_fakeFlight, new FlightRecordEventArgs(record));


            IFlightTrack persistedArg = null;

            _uut.LeftAirspace += (sender, e) => { persistedArg = e.FlightTrack; };

            _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(false);
            _fakeFlight.FlightRecordReceived += Raise.EventWith(_fakeFlight, new FlightRecordEventArgs(record));

            Assert.That(persistedArg, Is.Not.Null);
        }
Exemple #13
0
        private void OnFlightTrackDataReady(object o, FlightTrackDataEventArgs args)
        {
            Debug.Log("FlightManager: Handling FlightTrackDataReady event, recieved " + args.FTDataPoints.Count + " Datapoints");
            List <FTDataPoint>  recievedDataPoints = args.FTDataPoints;
            List <IFlightTrack> updatedflights     = new List <IFlightTrack>();

            foreach (var dp in args.FTDataPoints)
            {
                if (!_flights.Exists(x => x.GetTag() == dp.Tag))
                {
                    Debug.Log("New flight entered sensor range with tag '" + dp.Tag + "'");
                    _flights.Add(new Flight(dp));
                }

                //Debug.Log("FlightManager: Adding datapoint to flight with tag '" + dp.Tag + "'");
                IFlightTrack f = _flights.Find(x => x.GetTag() == dp.Tag);
                f.AddDataPoint(dp);

                updatedflights.Add(f);
            }

            Debug.Log("FlightManager: Invoking FlightTracksUpdated, sending list of " + updatedflights.Count + " updated flights");
            FlightTracksUpdated?.Invoke(this, new FlightTracksUpdatedEventArgs(updatedflights));
        }
Exemple #14
0
 public EnterExitEvent(IFlightTrack flight, bool entered)
     : base("Airspace", "Flight " + flight.GetTag() + " has " + ((entered) ? "entered" : "left") + " airspace at " + flight.GetLastUpdatedAt().ToLongTimeString())
 {
     Flight  = flight;
     Entered = entered;
 }
Exemple #15
0
 public SeperationEvent(IFlightTrack flight_A, IFlightTrack flight_B)
     : base("Seperation", flight_A.GetTag() + " and " + flight_B.GetTag())
 {
     Flight_A = flight_A;
     Flight_B = flight_B;
 }
Exemple #16
0
 public FlightTrackUpdatedEventArgs(IFlightTrack flight)
 {
     UpdatedFlight = flight;
 }
 public FlightTrackEventArgs(IFlightTrack track)
 {
     FlightTrack = track;
 }
 private double CalculateHorizontialDistance(IFlightTrack track1, IFlightTrack track2) //checks if new FlightTrack update's position is too close to any other flight
 {
     return(Math.Round(Math.Abs(Math.Pow(track1.Position.Latitude - track2.Position.Latitude, 2)
                                + Math.Pow(track1.Position.Longitude - track2.Position.Longitude, 2))));
 }
 private double CalculateVerticalDistance(IFlightTrack track1, IFlightTrack track2) //checks if new FlightTrack update's altitude is too close to any other flight
 {
     return(Math.Abs(track1.Position.Altitude - track2.Position.Altitude));
 }