Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            FlightContextFactory.OnTakeoff += (sender, e) => {
                Console.WriteLine($"{DateTime.UtcNow}: {e.Flight.Aircraft} - Took off from {e.Flight.DepartureLocation.X}, {e.Flight.DepartureLocation.Y}");
            };

            FlightContextFactory.OnLanding += (sender, e) => {
                Console.WriteLine($"{DateTime.UtcNow}: {e.Flight.Aircraft} - Landed at {e.Flight.ArrivalLocation.X}, {e.Flight.ArrivalLocation.Y}");
            };

            FlightContextFactory.OnRadarContact += (sender, e) => {
                var lastPositionUpdate = e.Flight.PositionUpdates.OrderByDescending(q => q.TimeStamp).First();

                Console.WriteLine($"{DateTime.UtcNow}: {e.Flight.Aircraft} - Radar contact at {lastPositionUpdate.Latitude}, {lastPositionUpdate.Longitude} @ {lastPositionUpdate.Altitude}ft {lastPositionUpdate.Heading.ToHeadingArrow()}");
            };

            FlightContextFactory.OnContextDispose += (sender, e) =>
            {
                Console.WriteLine($"{DateTime.UtcNow}: {e.Context.Flight.Aircraft} - Context disposed");
            };


            AprsClient = new Listener(new Config()
            {
                Callsign        = @"7CB0DBG",
                Password        = "******",
                Uri             = "aprs.glidernet.org",
                UseOgnAdditives = true,
                Port            = 10152
            });

            AprsClient.PacketReceived += (sender, e) => {
                if (e.AprsMessage.DataType == Boerman.AprsClient.Enums.DataType.Status)
                {
                    return;
                }

                FlightContextFactory.Process(new Skyhop.FlightAnalysis.Models.PositionUpdate(
                                                 e.AprsMessage.Callsign,
                                                 e.AprsMessage.ReceivedDate,
                                                 e.AprsMessage.Latitude.AbsoluteValue,
                                                 e.AprsMessage.Longitude.AbsoluteValue,
                                                 e.AprsMessage.Altitude.FeetAboveSeaLevel,
                                                 e.AprsMessage.Speed.Knots,
                                                 e.AprsMessage.Direction.ToDegrees()));
            };

            AprsClient.Open();

            Console.WriteLine("Currently checking to see if we can receive some information!");


            Console.Read();
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var ff = new FlightContextFactory(options =>
            {
                options.NearbyRunwayAccessor = (Point point, double distance) =>
                {
                    return(new[]
                    {
                        new Runway(
                            new Point(4.942108, 51.572418, 49),
                            new Point(4.933319, 51.555660, 49)
                            ),
                        new Runway(
                            new Point(4.950768, 51.565256, 49),
                            new Point(4.911974, 51.569548, 49))
                    });
                };
            });

            using (var reader = new StreamReader(@"C:\Users\Corstian\Projects\Whaally\Skyhop\EHGR-Sept.csv"))
                using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                    using (var writer = new StreamWriter("./experimental-logs-sept-92.csv"))
                        using (var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture))
                        {
                            var lines = csv.GetRecords <CsvData>();

                            var departureCounter = 0;
                            var arrivalCounter   = 0;

                            ff.OnTakeoff += (sender, args) =>
                            {
                                departureCounter++;
                            };

                            ff.OnLanding += (sender, args) =>
                            {
                                arrivalCounter++;

                                var data = new
                                {
                                    args.Flight.Aircraft,
                                    args.Flight.DepartureHeading,
                                    DepartureX = args.Flight.DepartureLocation?.X,
                                    DepartureY = args.Flight.DepartureLocation?.Y,
                                    args.Flight.DepartureTime,
                                    args.Flight.DepartureInfoFound,
                                    args.Flight.LaunchMethod,
                                    args.Flight.ArrivalHeading,
                                    ArrivalX = args.Flight.ArrivalLocation?.X,
                                    ArrivalY = args.Flight.ArrivalLocation?.Y,
                                    args.Flight.ArrivalTime,
                                    args.Flight.ArrivalInfoFound,
                                };

                                csvWriter.WriteRecord(data);
                                csvWriter.NextRecord();
                                csvWriter.Flush();
                            };

                            var timestamp = DateTime.Parse("2020-09-05T15:00:01");

                            ff.Process(lines
                                       //.Where(q => q.Timestamp > timestamp)
                                       .Select(q => new PositionUpdate(q.Aircraft, q.Timestamp, q.Longitude, q.Latitude, q.Altitude, q.Speed, q.Heading))
                                       .ToList());

                            Console.WriteLine(departureCounter);
                            Console.WriteLine(arrivalCounter);
                        }
        }
Ejemplo n.º 3
0
        public void Run()
        {
            _logger.LogInformation("Starting AnalyserService");

            SubscribeContextFactoryEventHandlers(FlightContextFactory);


            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Range(46.801111, 8.226667, 250)); // geographical center of switzerland
            var filter     = builder.GetFilter();
            var aprsConfig = new Config()
            {
                Callsign        = @"Speck78",
                Password        = "******",
                Uri             = "aprs.glidernet.org", // glidern1.glidernet.org // aprs.glidernet.org
                UseOgnAdditives = true,
                Port            = 14580,
                Filter          = filter
            };

            AprsClient = new Listener(aprsConfig);

            _logger.LogInformation("Created new AprsClient with config: {aprsConfig}", System.Text.Json.JsonSerializer.Serialize(aprsConfig));
            AprsClient.PacketReceived += (sender, e) =>
            {
                try
                {
                    if (e.AprsMessage.DataType == DataType.Status)
                    {
                        return;
                    }

                    var posUpdate = new Skyhop.FlightAnalysis.Models.PositionUpdate(
                        e.AprsMessage.Callsign,
                        e.AprsMessage.ReceivedDate,
                        e.AprsMessage.Latitude.AbsoluteValue,
                        e.AprsMessage.Longitude.AbsoluteValue,
                        e.AprsMessage.Altitude.FeetAboveSeaLevel,
                        e.AprsMessage.Speed.Knots,
                        e.AprsMessage.Direction.ToDegrees());
                    try
                    {
                        FlightContextFactory.Process(posUpdate);
                    }
                    catch (Exception exception)
                    {
                        _logger.LogError(exception, "Error: {ExceptionMessage}: Position update: {PositionUpdate}", exception.Message, posUpdate);
                    }
                }
                catch (Exception ex)
                {
                    //ColorConsole.WriteLine($"Error: {ex.Message}: AprsMessage: {e.AprsMessage}", ConsoleColor.Red);
                    _logger.LogError(ex, "Error: {ExceptionMessage}: AprsMessage: {AprsMessage}", ex.Message, e.AprsMessage);
                }
            };

            AprsClient.Open();

            _logger.LogInformation("Opened Aprs Client");
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            // On start, execute migrations and retrieve the unfinished flights
            using (var db = new Database()) {
                db.Database.Migrate();

                var flights = db.Flights.Where(q => !q.Completed).ToList();

                FlightContextFactory = new FlightContextFactory(flights);
            }

            FlightContextFactory.OnTakeoff += async(sender, e) => {
                Console.WriteLine($"{DateTime.UtcNow}: {e.Flight.Aircraft} - Took off from {e.Flight.DepartureLocation.X}, {e.Flight.DepartureLocation.Y}");
                await StoreModelChange(e.Flight);
            };

            FlightContextFactory.OnLanding += async(sender, e) => {
                Console.WriteLine($"{DateTime.UtcNow}: {e.Flight.Aircraft} - Landed at {e.Flight.ArrivalLocation.X}, {e.Flight.ArrivalLocation.Y}");
                await StoreModelChange(e.Flight);
            };

            FlightContextFactory.OnRadarContact += async(sender, e) => {
                var lastPositionUpdate = e.Flight.PositionUpdates.OrderByDescending(q => q.TimeStamp).First();

                Console.WriteLine($"{DateTime.UtcNow}: {e.Flight.Aircraft} - Radar contact at {lastPositionUpdate.Latitude}, {lastPositionUpdate.Longitude} @ {lastPositionUpdate.Altitude}ft {lastPositionUpdate.Heading.ToHeadingArrow()}");

                await StoreModelChange(e.Flight);
            };

            FlightContextFactory.OnCompletedWithErrors += async(sender, e) => {
                await StoreModelChange(e.Flight);
            };

            AprsClient = new Listener(new Config
            {
                Callsign        = @"7CB0DBG",
                Password        = "******",
                Uri             = "aprs.glidernet.org",
                UseOgnAdditives = true,
                Port            = 10152
            });

            AprsClient.PacketReceived += (sender, e) => {
                if (e.AprsMessage.DataType == Boerman.AprsClient.Enums.DataType.Status)
                {
                    return;
                }
                if (String.IsNullOrEmpty(e.AprsMessage.Callsign))
                {
                    return;
                }

                FlightContextFactory.Process(new PositionUpdate(
                                                 e.AprsMessage.Callsign,
                                                 e.AprsMessage.ReceivedDate,
                                                 e.AprsMessage.Latitude.AbsoluteValue,
                                                 e.AprsMessage.Longitude.AbsoluteValue,
                                                 e.AprsMessage.Altitude.FeetAboveSeaLevel,
                                                 e.AprsMessage.Speed.Knots,
                                                 e.AprsMessage.Direction.ToDegrees()));
            };

            AprsClient.Open();

            Console.WriteLine("Currently checking to see if we can receive some information!");

            Console.Read();
        }