예제 #1
0
        public void TestUnprotoFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Unproto("test"));
            Assert.AreEqual("u/test", builder.GetFilter());
        }
예제 #2
0
        public void TestRangeFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Range(52, 5, 10));
            Assert.AreEqual("r/52/5/10", builder.GetFilter());
        }
예제 #3
0
        public void TestGroupMessageFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.GroupMessage("test"));
            Assert.AreEqual("g/test", builder.GetFilter());
        }
예제 #4
0
        public void TestAreaFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Area(1, 2, 3, 4));
            Assert.AreEqual("a/1/2/3/4", builder.GetFilter());
        }
예제 #5
0
        public void TestEntryStationFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.EntryStation("test"));
            Assert.AreEqual("e/test", builder.GetFilter());
        }
예제 #6
0
        public void TestSymbolFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Symbol("!", "@", "3"));
            Assert.AreEqual("s/!/@/3", builder.GetFilter());
        }
예제 #7
0
        public void TestDigipeaterFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Digipeater("TEST1", "TEST2"));
            Assert.AreEqual("d/TEST1/TEST2", builder.GetFilter());
        }
예제 #8
0
        public void TestObjectFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Object("object"));
            Assert.AreEqual("o/object", builder.GetFilter());
        }
예제 #9
0
        public void TestTypeFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Type(AprsFilter.Types.All));
            Assert.AreEqual("t/poimqstunw", builder.GetFilter());
        }
예제 #10
0
        public void TestBudlistFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Budlist("abcdefg"));
            Assert.AreEqual("b/abcdefg", builder.GetFilter());
        }
예제 #11
0
        public void TestPrefixFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.Prefix("DD", "DE"));
            Assert.AreEqual("p/DD/DE", builder.GetFilter());
        }
예제 #12
0
        public void TestFriendRangeFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.FriendRange("TEST", 100));
            Assert.AreEqual("f/TEST/100", builder.GetFilter());
        }
예제 #13
0
        public void TestMyRangeFilter()
        {
            var builder = new AprsFilterBuilder();

            builder.AddFilter(new AprsFilter.MyRange(100));
            Assert.AreEqual("m/100", builder.GetFilter());
        }
예제 #14
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");
        }