Пример #1
0
        private void OnAirspaceContentUpdated(object sender, FlightTracksUpdatedEventArgs e)
        {
            var newflights = e.UpdatedFlights;

            if (newflights.Count > 0 || previous.Count > 0)
            {
                //Check for enter events
                foreach (var newf in newflights)
                {
                    if (!previous.Any(x => x.GetTag() == newf.GetTag()))
                    {
                        EnterExitEvent newevent = new EnterExitEvent(newf, true);
                        EnterExitEventDetected?.Invoke(this, new EnterExitEventDetectedArgs(newevent));
                    }
                }
                //Check for exit events
                foreach (var oldf in previous)
                {
                    if (!newflights.Any(x => x.GetTag() == oldf.GetTag()))
                    {
                        EnterExitEvent newevent = new EnterExitEvent(oldf, false);
                        EnterExitEventDetected?.Invoke(this, new EnterExitEventDetectedArgs(newevent));
                    }
                }
            }
            previous.Clear();
            previous.AddRange(newflights);
        }
Пример #2
0
        public void OnDataSourceFlightTracksUpdated_FlightEnterThenExit_OneEnterEventOneExitEvent()
        {
            //Arrange
            var args1 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
            });
            var args2 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args3 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args4 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args5 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
            });

            //Act
            _datasource.FlightTracksUpdated += Raise.EventWith(args1);
            _datasource.FlightTracksUpdated += Raise.EventWith(args2);
            _datasource.FlightTracksUpdated += Raise.EventWith(args3);
            _datasource.FlightTracksUpdated += Raise.EventWith(args4);
            _datasource.FlightTracksUpdated += Raise.EventWith(args5);

            //Assert
            Assert.That(_flightTracksUpdatedCounter, Is.EqualTo(5));
            Assert.That(_enterExitEventDetectedCounter, Is.EqualTo(2));
            Assert.That(_enterExitEventsDetected.Count, Is.EqualTo(2));
            Assert.That(_enteredCounter, Is.EqualTo(1));
            Assert.That(_exitedCounter, Is.EqualTo(1));
            Assert.That(_lastEnterExitEventDetected.Entered, Is.EqualTo(false));
            Assert.That(_lastEnterExitEventDetected.Flight.GetTag(), Is.EqualTo("TAG123"));
        }
        public void OnFlightTracksUpdated_FlightEnter_DeactivationScheduled()
        {
            //Arrange
            var args1 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
            });
            var args2 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args3 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });

            var args4 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });

            //Act
            _dataSource.FlightTracksUpdated += Raise.EventWith(args1);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args2);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args3);
            //Thread.Sleep(5500); // sleep 5.5 seconds
            _dataSource.FlightTracksUpdated += Raise.EventWith(args4);

            //Assert
            Assert.That(_lastReceivedEnterExitEvents.Count, Is.EqualTo(1));
            Assert.That(_lastReceivedEnterExitEvents.Where(e => e.Entered).Count, Is.EqualTo(1));
            Assert.That(_lastReceivedEnterExitEvents.Where(e => !e.Entered).Count, Is.EqualTo(0));
            Assert.That(_uut.ScheduledDeactivationsCount, Is.EqualTo(1));
        }
        public void OnFlightTracksUpdated_FlightEnterThenOtherFlightEnter_TwoEnterEvents()
        {
            //Arrange
            var args1 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
            });
            var args2 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args3 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args4 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1, _flight2
            });
            var args5 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1, _flight2
            });

            //Act
            _dataSource.FlightTracksUpdated += Raise.EventWith(args1);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args2);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args3);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args4);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args5);

            //Assert
            Assert.That(_lastReceivedEnterExitEvents.Count, Is.EqualTo(2));
            Assert.That(_lastReceivedEnterExitEvents.Where(e => e.Entered).Count, Is.EqualTo(2));
            Assert.That(_lastReceivedEnterExitEvents.Where(e => !e.Entered).Count, Is.EqualTo(0));
        }
Пример #5
0
        public void OnFlightTracksUpdated_FlightEnterAirspaceThenOtherFlightEnterNotInAirspace_OneEnterEvents()
        {
            //Arrange
            _flight1.GetCurrentAltitude().Returns(1d); //inside
            _flight2.GetCurrentAltitude().Returns(0d); //outside

            var args1 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
            });
            var args2 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args3 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });
            var args4 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1, _flight2
            });
            var args5 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1, _flight2
            });

            //Act
            _dataSource.FlightTracksUpdated += Raise.EventWith(args1);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args2);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args3);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args4);
            _dataSource.FlightTracksUpdated += Raise.EventWith(args5);

            //Assert
            Assert.That(_lastReceivedEnterExitEvents.Count, Is.EqualTo(1));
            Assert.That(_lastReceivedEnterExitEvents.Where(e => e.Entered).Count, Is.EqualTo(1));
            Assert.That(_lastReceivedEnterExitEvents.Where(e => !e.Entered).Count, Is.EqualTo(0));
        }
Пример #6
0
        public void OnFlightTracksUpdated_AirspaceUpdatedEventRaised()
        {
            //Arrange
            var args = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1
            });

            //Act
            _datasource.FlightTracksUpdated += Raise.EventWith(args);

            //Assert
            Assert.That(_airspaceUpdatedEventCount, Is.EqualTo(1));
        }
Пример #7
0
        public void OnFlightTracksUpdated_OneFlightNotInAirspace_AirspaceUpdated_NoFlightsInAirspace()
        {
            //Arrange
            _area.IsInside(Arg.Any <int>(), Arg.Any <int>(), Arg.Any <int>()).Returns(false);
            var args = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight2
            });

            //Act
            _datasource.FlightTracksUpdated += Raise.EventWith(args);

            Assert.That(_airspaceUpdatedEventCount, Is.EqualTo(1));
            Assert.That(_airspaceUpdatedEventContent.Count, Is.EqualTo(0));
        }
Пример #8
0
        public void OnFlightTrackDataReady_FlightTrackDataSourceToSensorAreaManager_OneEventOneEntry(List <FTDataPoint> argsData, FlightTracksUpdatedEventArgs multipleData, List <IFlightTrack> tracker)
        {
            // Arrange
            var testFlightTrackDataArgs = new FlightTrackDataEventArgs(argsData);
            var testDataAfterEvent      = new FlightTracksUpdatedEventArgs(new List <IFlightTrack>());

            _uut.FlightTracksUpdated +=
                (sender, args) => testDataAfterEvent.UpdatedFlights = args.UpdatedFlights;

            // Act
            _testFlightTrackDataSource.FlightTrackDataReady += Raise.EventWith(this, testFlightTrackDataArgs);

            // Assert
            Assert.That(_outputEventCounter, Is.EqualTo(1));
            Assert.That(testDataAfterEvent.UpdatedFlights.Count, Is.EqualTo(multipleData.UpdatedFlights.Count));
        }
Пример #9
0
        public void OnFlightTracksUpdated_OneFlightInAirspaceOnFlightOutsideAirspace_AirspaceUpdated_OneFlightInAirspace()
        {
            //Arrange
            _flight1.GetCurrentAltitude().Returns(1d);
            _flight2.GetCurrentAltitude().Returns(0d);
            _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);
            var args = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1, _flight2
            });

            //Act
            _datasource.FlightTracksUpdated += Raise.EventWith(args);

            //Assert
            Assert.That(_airspaceUpdatedEventCount, Is.EqualTo(1));
            Assert.That(_airspaceUpdatedEventContent.Count, Is.EqualTo(1));
        }
Пример #10
0
        private void OnFlightTracksUpdated(object o, FlightTracksUpdatedEventArgs args)
        {
            List <IFlightTrack> allUpdatedFlights = args.UpdatedFlights;

            _content.Clear();

            foreach (var f in allUpdatedFlights)
            {
                var pos = f.GetCurrentPosition();
                if (_airspaceArea.IsInside((int)pos.X, (int)pos.Y, (int)f.GetCurrentAltitude()))
                {
                    _content.Add(f);
                }
            }

            FlightTracksUpdated?.Invoke(this, new FlightTracksUpdatedEventArgs(_content));
            AirspaceContentUpdated?.Invoke(this, new AirspaceContentEventArgs(_content));
        }
Пример #11
0
        public void OnFlightUpdatedSeperationEventDetect_TwoFlightsSeperate_TwoEnterOneEvent()
        {
            _flight1a.GetCurrentPosition().Returns(new Vector2(5000, 7050));
            _flight1b.GetCurrentPosition().Returns(new Vector2(5000, 6960));
            _flight1c.GetCurrentPosition().Returns(new Vector2(5000, 6850));

            _flight2a.GetCurrentPosition().Returns(new Vector2(5000, 2000));
            _flight2b.GetCurrentPosition().Returns(new Vector2(5000, 2100));
            _flight2c.GetCurrentPosition().Returns(new Vector2(5000, 2200));

            _flight1a.GetCurrentAltitude().Returns(700);
            _flight1b.GetCurrentAltitude().Returns(700);
            _flight1c.GetCurrentAltitude().Returns(700);
            _flight2a.GetCurrentAltitude().Returns(600);
            _flight2b.GetCurrentAltitude().Returns(600);
            _flight2c.GetCurrentAltitude().Returns(600);

            var args1 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1a, _flight2a
            });                                                                                            //Far enough
            var args2 = new FlightTracksUpdatedEventArgs(new List <IFlightTrack> {
                _flight1b, _flight2b
            });                                                                                            //too close

            //var args3 = new FlightTracksUpdatedEventArgs(new List<IFlightTrack> { _flight1c, _flight2c }); //still too close

            //Act
            _datasource.FlightTracksUpdated += Raise.EventWith(args1);
            _datasource.FlightTracksUpdated += Raise.EventWith(args2);
            //_datasource.FlightTracksUpdated += Raise.EventWith(args3);



            Assert.That(_SeperationEventCount, Is.EqualTo(1));
            Assert.That(_flightTracksUpdatedCounter, Is.EqualTo(2));
        }
Пример #12
0
        private void OnFlightTracksUpdated(object sender, FlightTracksUpdatedEventArgs e)
        {
            List <IFlightTrack> allUpdatedFlights = e.UpdatedFlights;

            CheckForSeperationEvents(allUpdatedFlights);
        }
Пример #13
0
        private void OnFlightTracksUpdated(object o, FlightTracksUpdatedEventArgs args)
        {
            //List<IFlightTrack> allUpdatedFlights = args.UpdatedFlights;
            //for (int i = 0; i < allUpdatedFlights.Count; i++)
            //{
            //    for (int j = i + 1; j < allUpdatedFlights.Count; j++)
            //    {
            //        IFlightTrack f1 = allUpdatedFlights[i];
            //        IFlightTrack f2 = allUpdatedFlights[j];
            //        if (TracksConflicting(f1, f2))
            //        {
            //            SeperationEvent detectedSeperation
            //            Debug.Log("Current SeperationEvent between " + detectedSeperation.FlightA.GetTag() + " and " + detectedSeperation.FlightB.GetTag() + "started at time: " + detectedSeperation.TimeOfOccurance);

            //            if (!ActiveSeperations.Exists(x => x.HasSameTagsAs(detectedSeperation)))
            //            {
            //                Console.WriteLine("A SeperationEvent has just been identified" + detectedSeperation.FlightA.GetTag() + " and " + detectedSeperation.FlightB.GetTag() + "started at time: " + detectedSeperation.TimeOfOccurance);
            //                ActiveSeperations.Add(detectedSeperation);
            //                //SeperationIdentified?.Invoke(this, detectedSeperation);
            //                SeperationsUpdatedEventArgs a = new SeperationsUpdatedEventArgs(ActiveSeperations);
            //                SeperationEventsUpdated?.Invoke(this, a);
            //            }
            //            else
            //            {
            //                //Debug.Log("SeperationController: SeperationEvent still going on, somebody do something!");
            //            }
            //        }
            //    }
            //}

            //if (ActiveSeperations.Count > 0)
            //{
            //    bool seperationResolved = false;
            //    int resolvedSeperationIndex = -1;
            //    foreach (var sepEvent in ActiveSeperations)
            //    {
            //        for (int i = 0; i < allUpdatedFlights.Count; i++)
            //        {
            //            for (int j = i + 1; j < allUpdatedFlights.Count; j++)
            //            {
            //                IFlightTrack f1 = allUpdatedFlights[i];
            //                IFlightTrack f2 = allUpdatedFlights[j];
            //                if (sepEvent.HasSameTagsAs(f1, f2))
            //                {
            //                    if (CheckForSeperationEvent(f1, f2) == null)
            //                    {
            //                        resolvedSeperationIndex = ActiveSeperations.FindIndex(x => x.HasSameTagsAs(f1, f2));
            //                        Debug.Log("SeperationHandler: Seperation between" + sepEvent.FlightA.GetTag() + " and " + sepEvent.FlightB.GetTag() + " resolved!");
            //                    }
            //                }
            //            }
            //        }
            //    }
            //    if (seperationResolved)
            //    {
            //        ActiveSeperations.RemoveAt(resolvedSeperationIndex);
            //    }
            //}
            //if (ActiveSeperations.Count == 0)
            //{

            //}
            //else
            //{
            //    Console.WriteLine("---------------------Current Seperation Events:------------------- ");
            //    foreach (var f in ActiveSeperations) //Should be in monitor
            //    {
            //        Console.WriteLine("SeperationEvent involving " + f.FlightA.GetTag() + " and " + f.FlightB.GetTag() + ", started at time: " + f.TimeOfOccurance);
            //    }
            //}
        }