예제 #1
0
        private void OnSeperationEventDetected(object sender, SeperationDetectedEventArgs e)
        {
            var detectedSeperation = e.DetectedEvent;

            //Debug.Log("Current SeperationEvent between " + detectedSeperation.Flight_A.GetTag() + " and " + detectedSeperation.Flight_B.GetTag() + "started at time: " + detectedSeperation.ActivationTime);
            if (!ActiveSeperations.Exists(x => x.HasSameTagsAs(detectedSeperation)))
            {
                ActiveSeperations.Add(detectedSeperation);
            }
            //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!");
            //}
            SeperationEventsUpdated?.Invoke(this, new SeperationEventsUpdatedEventArgs(ActiveSeperations));
        }
예제 #2
0
        private void OnFlightTracksUpdated(object o, MultipleFlightTracksUpdatedEventArgs args)
        {
            List <IFlightTrackerSingle> allUpdatedFlights = args.UpdatedFlights;

            for (int i = 0; i < allUpdatedFlights.Count; i++)
            {
                for (int j = i + 1; j < allUpdatedFlights.Count; j++)
                {
                    IFlightTrackerSingle f1 = allUpdatedFlights[i];
                    IFlightTrackerSingle f2 = allUpdatedFlights[j];
                    SeperationEventArgs  detectedSeperation = CheckForSeperationEvent(f1, f2);
                    if (detectedSeperation != null)
                    {
                        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++)
                        {
                            IFlightTrackerSingle f1 = allUpdatedFlights[i];
                            IFlightTrackerSingle 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);
                }
            }
        }