public void DataReceived(object o, RawTransponderDataEventArgs args)
        {
            //Add or update tracks
            foreach (var track in args.TransponderData)
            {
                TrackOperations.AddOrUpdate(track);
            }

            //Check if tracks are in airspace
            foreach (var track in TrackOperations.GetAll())
            {
                track.WithinAirspace = Airspace.CalculateWithinAirspace(track.Position);
            }

            //Check for Separations
            if (TrackOperations.GetAll().Count > 1)
            {
                SeparationOperations.CheckForSeparations(TrackOperations.GetAll().ToList());
            }

            //Check for outdated separations
            UpdateOldSeparations();

            //Display everything
            OutputTerminal();
        }
        public void OutputTerminal()
        {
            Display.Clear();
            if (SeparationRepository.GetAll().Count != 0)
            {
                Display.WriteRed("Separation Event(s):");
                foreach (var sep in SeparationRepository.GetAll())
                {
                    Display.WriteRed(sep.Tag1 + "/" + sep.Tag2 + " Time: " + sep.Time);
                }
            }

            if (TrackOperations.GetAll().Count != 0)
            {
                Display.Write("Tracks:");
                foreach (var track in TrackOperations.GetAll())
                {
                    if (track.WithinAirspace)
                    {
                        Display.Write("Tag: " + track.Tag + " CurrentPosition: " + track.Position.X + "mE," +
                                      track.Position.Y +
                                      "mN Altitude: " + track.Position.Altitude + "m Velocity: " +
                                      Math.Round(track.Velocity, 2) + "m/s Course: " +
                                      Math.Round(track.Course, 2) + "°");
                    }
                }
            }
        }
        public void UpdateOldSeparations()
        {
            // Find all separations
            var separationEvents = SeparationRepository.GetAll();
            // Find all tracks
            var tracks = TrackOperations.GetAll().ToList();
            // Find all tracks still on separationlist
            var possiblyOutdatedSeparations = separationEvents
                                              .Select(separations => tracks.FirstOrDefault(t => t.Tag == separations.Tag1)).ToList();
            // Find all tracks that shouldnt be on separationlist
            var outdatedSeparations = SeparationOperations.CheckForOutdatedSeparationEvents(possiblyOutdatedSeparations);

            // Now delete all of these
            foreach (string sep in outdatedSeparations)
            {
                var split = sep.Split(';');
                var separationToRemove = SeparationRepository.Get(split[0], split[1]);
                if (separationToRemove != null)
                {
                    SeparationRepository.DeleteSeperationEvent(separationToRemove);
                }
            }
        }