public void BaseStationMessageEventArgs_Constructs_To_Known_State_And_Properties_Work()
        {
            BaseStationMessage          message = new Mock <BaseStationMessage>().Object;
            BaseStationMessageEventArgs args    = new BaseStationMessageEventArgs(message);

            Assert.AreSame(message, args.Message);
        }
        public void MergedFeedListener_SetListener_Still_Considers_Old_Listeners_Offical_Sources_Of_Icaos_Until_They_Expire()
        {
            _MergedFeed.SetListeners(_Components);
            var messageArgs = new BaseStationMessageEventArgs(new BaseStationMessage()
            {
                Icao24 = "123456"
            });
            var resetArgs = new EventArgs <string>("123456");

            _Listener2.Raise(r => r.Port30003MessageReceived += null, messageArgs);
            _Listener2.Raise(r => r.PositionReset            += null, resetArgs);
            _Listeners.Remove(_Listener2.Object);
            _MergedFeed.SetListeners(_Components);
            _MergedFeed.Port30003MessageReceived += _BaseStationMessageEventRecorder.Handler;
            _MergedFeed.PositionReset            += _PositionResetRecorder.Handler;

            _Clock.UtcNowValue = _Clock.UtcNowValue.AddMilliseconds(_MergedFeed.IcaoTimeout);
            _Listener1.Raise(r => r.Port30003MessageReceived += null, messageArgs);
            _Listener1.Raise(r => r.PositionReset            += null, resetArgs);
            Assert.AreEqual(0, _BaseStationMessageEventRecorder.CallCount);
            Assert.AreEqual(0, _PositionResetRecorder.CallCount);

            _Clock.UtcNowValue = _Clock.UtcNowValue.AddMilliseconds(1);
            _Listener1.Raise(r => r.Port30003MessageReceived += null, messageArgs);
            _Listener1.Raise(r => r.PositionReset            += null, resetArgs);
            Assert.AreEqual(1, _BaseStationMessageEventRecorder.CallCount);
            Assert.AreEqual(1, _PositionResetRecorder.CallCount);
        }
Beispiel #3
0
 /// <summary>
 /// Raises <see cref="Port30003MessageReceived"/>
 /// </summary>
 /// <param name="args"></param>
 private void OnPort30003MessageReceived(BaseStationMessageEventArgs args)
 {
     EventHelper.RaiseQuickly(Port30003MessageReceived, this, () => {
         args.Message.ReceiverId = ReceiverId;
         return(args);
     });
 }
Beispiel #4
0
 /// <summary>
 /// Called by the listener when a BaseStation message is received.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void MessageListener_MessageReceived(object sender, BaseStationMessageEventArgs args)
 {
     if (_BackgroundThreadMessageQueue != null)
     {
         _BackgroundThreadMessageQueue.Enqueue(args);
     }
 }
        public void BaseStationMessageEventArgs_Constructs_To_Known_State_And_Properties_Work()
        {
            BaseStationMessage message = new Mock <BaseStationMessage>().Object;

            BaseStationMessageEventArgs args = new BaseStationMessageEventArgs(message);

            Assert.AreSame(message, args.Message);
            Assert.AreEqual(false, args.IsOutOfBand);
            Assert.AreEqual(false, args.IsSatcomFeed);


            var args2 = new BaseStationMessageEventArgs(message, true, false);

            Assert.AreSame(message, args2.Message);
            Assert.AreEqual(true, args2.IsOutOfBand);
            Assert.AreEqual(false, args2.IsSatcomFeed);

            var args3 = new BaseStationMessageEventArgs(message, false, true);

            Assert.AreSame(message, args3.Message);
            Assert.AreEqual(false, args3.IsOutOfBand);
            Assert.AreEqual(true, args3.IsSatcomFeed);

            var args4 = new BaseStationMessageEventArgs(message, true, true);

            Assert.AreSame(message, args4.Message);
            Assert.AreEqual(true, args4.IsOutOfBand);
            Assert.AreEqual(true, args4.IsSatcomFeed);
        }
 /// <summary>
 /// Raises <see cref="Port30003MessageReceived"/>
 /// </summary>
 /// <param name="args"></param>
 private void OnPort30003MessageReceived(BaseStationMessageEventArgs args)
 {
     if (Port30003MessageReceived != null)
     {
         Port30003MessageReceived(this, args);
     }
 }
Beispiel #7
0
 /// <summary>
 /// Passes through events from the original <see cref="Port30003MessageReceived"/>.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void Original_Port30003MessageReceived(object sender, BaseStationMessageEventArgs args)
 {
     args = Filter.FilterEvent(args);
     if (args != null)
     {
         OnPort30003MessageReceived(args);
     }
 }
Beispiel #8
0
 /// <summary>
 /// Raised when the listener picks up a Port 30003 format message (or derives one from a raw message).
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void Listener_Port30003MessageReceived(object sender, BaseStationMessageEventArgs args)
 {
     if (Online)
     {
         var bytes = Encoding.ASCII.GetBytes(String.Concat(args.Message.ToBaseStationString(), "\r\n"));
         BroadcastProvider.Send(bytes);
     }
 }
Beispiel #9
0
        /// <summary>
        /// Called when a listener raises a BaseStation message event.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void Listener_Port30003MessageReceived(object sender, BaseStationMessageEventArgs args)
        {
            try {
                var listener = (IListener)sender;

                _MessageProcessingQueue.Enqueue(new MessageReceived(_Clock.UtcNow, listener, args));
            } catch (Exception ex) {
                OnExceptionCaught(new EventArgs <Exception>(ex));
            }
        }
Beispiel #10
0
 /// <summary>
 /// Raised when the listener picks up a Port 30003 format message (or derives one from a raw message).
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void Listener_Port30003MessageReceived(object sender, BaseStationMessageEventArgs args)
 {
     if (RebroadcastServer.ConnectionEstablished)
     {
         byte[] bytes = Encoding.ASCII.GetBytes(String.Concat(args.Message.ToBaseStationString(_ExtendedBasestationFormat), "\r\n"));
         if (bytes != null && bytes.Length > 0)
         {
             RebroadcastServer.Connector.Write(bytes);
         }
     }
 }
 /// <summary>
 /// Raised when the listener picks up a Port 30003 format message (or derives one from a raw message).
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void Listener_Port30003MessageReceived(object sender, BaseStationMessageEventArgs args)
 {
     if (RebroadcastServer.ConnectionEstablished)
     {
         var bytes = _Compressor.Compress(args.Message);
         if (bytes != null && bytes.Length > 0)
         {
             RebroadcastServer.Connector.Write(bytes);
         }
     }
 }
Beispiel #12
0
 /// <summary>
 /// Called when the background queue pops a message off the queue of messages.
 /// </summary>
 /// <param name="args"></param>
 private void MessageQueue_MessageReceived(BaseStationMessageEventArgs args)
 {
     try {
         TrackFlight(args.Message, isMlat: args.IsOutOfBand);
     } catch (ThreadAbortException) {
     } catch (Exception ex) {
         AbandonSession(ex, PluginStrings.ExceptionCaughtWhenProcessingMessage);
         Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.MessageRelay_MessageReceived caught exception {0}", ex.ToString()));
         Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on message processing: {0}", ex.ToString());
     }
 }
Beispiel #13
0
 /// <summary>
 /// Called when the background queue pops a message off the queue of messages.
 /// </summary>
 /// <param name="args"></param>
 private void MessageQueue_MessageReceived(BaseStationMessageEventArgs args)
 {
     try {
         TrackFlight(args.Message);
     } catch (ThreadAbortException) {
     } catch (Exception ex) {
         Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.MessageRelay_MessageReceived caught exception {0}", ex.ToString()));
         Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on message processing: {0}", ex.ToString());
         StatusDescription = String.Format(PluginStrings.ExceptionCaught, ex.Message);
         OnStatusChanged(EventArgs.Empty);
     }
 }
        public void MergedFeedListener_SetListener_BaseStationMessage_Events_On_Listeners_Passed_Through()
        {
            _MergedFeed.SetListeners(_Components);
            _MergedFeed.Port30003MessageReceived += _BaseStationMessageEventRecorder.Handler;

            var args = new BaseStationMessageEventArgs(new BaseStationMessage());

            _Listener1.Raise(r => r.Port30003MessageReceived += null, args);

            Assert.AreEqual(1, _BaseStationMessageEventRecorder.CallCount);
            Assert.AreSame(_MergedFeed, _BaseStationMessageEventRecorder.Sender);
            Assert.AreSame(args.Message, _BaseStationMessageEventRecorder.Args.Message);
        }
        public void MergedFeedListener_SetListener_Passes_Through_False_IsSatcomFeed_From_Nominated_Receiver()
        {
            _MergedFeed.IsSatcomFeed       = false;
            _Listener1.Object.IsSatcomFeed = false;
            _MergedFeed.SetListeners(_Components);
            _MergedFeed.Port30003MessageReceived += _BaseStationMessageEventRecorder.Handler;

            var args = new BaseStationMessageEventArgs(new BaseStationMessage());

            _Listener1.Raise(r => r.Port30003MessageReceived += null, args);

            Assert.AreEqual(1, _BaseStationMessageEventRecorder.CallCount);
            Assert.AreEqual(false, _BaseStationMessageEventRecorder.Args.IsSatcomFeed);
        }
Beispiel #16
0
        /// <summary>
        /// Processes messages from the receiver on a background thread. Using a background thread prevents
        /// our processing from interrupting the processing of messages by our receivers.
        /// </summary>
        /// <param name="messageReceived"></param>
        private void ProcessReceivedMessage(MessageReceived messageReceived)
        {
            var message        = messageReceived.MessageArgs.Message;
            var hasNoPosition  = message.Latitude.GetValueOrDefault() == 0.0 && message.Longitude.GetValueOrDefault() == 0.0;
            var hasTrack       = message.Track != null;
            var hasGroundSpeed = message.GroundSpeed != null;
            var filterOutcome  = FilterMessageFromListener(messageReceived.ReceivedUtc, messageReceived.Listener, message.Icao24, !hasNoPosition, hasTrack, hasGroundSpeed, message.IsMlat);

            if (filterOutcome != FilterMessageOutcome.Failed)
            {
                var args = new BaseStationMessageEventArgs(message, isOutOfBand: filterOutcome == FilterMessageOutcome.OutOfBand, isSatcomFeed: messageReceived.Listener.IsSatcomFeed);
                OnPort30003MessageReceived(args);
                ++TotalMessages;
            }
        }
        public void MergedFeedListener_SetListener_Passes_Through_Receiver_Id_On_BaseStation_Messages()
        {
            _MergedFeed.ReceiverId = 1234;
            _MergedFeed.SetListeners(_Components);
            _MergedFeed.Port30003MessageReceived += _BaseStationMessageEventRecorder.Handler;

            var args = new BaseStationMessageEventArgs(new BaseStationMessage()
            {
                ReceiverId = 998877
            });

            _Listener1.Raise(r => r.Port30003MessageReceived += null, args);

            Assert.AreEqual(998877, _BaseStationMessageEventRecorder.Args.Message.ReceiverId);
        }
        public void MergedFeedListener_SetListener_Does_Not_Respond_To_Events_From_Old_Listeners()
        {
            _MergedFeed.SetListeners(_Components);
            _MergedFeed.Port30003MessageReceived += _BaseStationMessageEventRecorder.Handler;
            _MergedFeed.PositionReset            += _PositionResetRecorder.Handler;
            var messageArgs = new BaseStationMessageEventArgs(new BaseStationMessage()
            {
                Icao24 = "123456"
            });
            var resetArgs = new EventArgs <string>("123456");

            _Components.Remove(_Component2.Object);
            _MergedFeed.SetListeners(_Components);
            _Listener2.Raise(r => r.Port30003MessageReceived += null, messageArgs);
            _Listener2.Raise(r => r.PositionReset            += null, resetArgs);

            Assert.AreEqual(0, _BaseStationMessageEventRecorder.CallCount);
            Assert.AreEqual(0, _PositionResetRecorder.CallCount);
        }
        public void MergedFeedListener_SetListener_Not_Interferred_With_By_Background_ICAO_Cleanup()
        {
            _MergedFeed.SetListeners(_Components);
            _MergedFeed.Port30003MessageReceived += _BaseStationMessageEventRecorder.Handler;
            _MergedFeed.PositionReset            += _PositionResetRecorder.Handler;
            var messageArgs = new BaseStationMessageEventArgs(new BaseStationMessage()
            {
                Icao24 = "123456"
            });
            var resetArgs = new EventArgs <string>("123456");

            _Listener1.Raise(r => r.Port30003MessageReceived += null, messageArgs);
            _Listener1.Raise(r => r.PositionReset            += null, resetArgs);

            _Clock.UtcNowValue = _Clock.UtcNowValue.AddMilliseconds(_MergedFeed.IcaoTimeout);
            _HeartbeatService.Raise(r => r.SlowTick += null, EventArgs.Empty);

            _Listener2.Raise(r => r.Port30003MessageReceived += null, messageArgs);
            _Listener2.Raise(r => r.PositionReset            += null, resetArgs);

            Assert.AreEqual(1, _BaseStationMessageEventRecorder.CallCount);
            Assert.AreEqual(1, _PositionResetRecorder.CallCount);
        }
Beispiel #20
0
        /// <summary>
        /// Returns the event args passed in, possibly altered, or null if the event must not be passed on.
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public static BaseStationMessageEventArgs FilterEvent(BaseStationMessageEventArgs args)
        {
            var result = args;

            if (args != null && args.Message != null)
            {
                var icaoNumber = CustomConvert.Icao24(args.Message.Icao24);
                if (icaoNumber != -1)
                {
                    if (_ParsedConfiguration.IsIcaoProhibited(icaoNumber))
                    {
                        result = null;
                    }
                    else if ((args.Message.IsMlat || args.IsOutOfBand) && _ParsedConfiguration.IsMlatProhibited())
                    {
                        result.Message.Latitude  = null;
                        result.Message.Longitude = null;
                        result.Message.Track     = null;
                    }
                }
            }

            return(result);
        }
Beispiel #21
0
 /// <summary>
 /// Raises <see cref="Port30003MessageReceived"/>.
 /// </summary>
 /// <param name="args"></param>
 private void OnPort30003MessageReceived(BaseStationMessageEventArgs args)
 {
     EventHelper.RaiseQuickly(Port30003MessageReceived, this, args);
 }
        public void MergedFeedListener_SetListener_Events_Are_Filtered_Correctly()
        {
            var worksheet = new ExcelWorksheetData(TestContext);

            _Component1.Setup(r => r.IsMlatFeed).Returns(worksheet.Bool("L1MLAT"));
            _Component2.Setup(r => r.IsMlatFeed).Returns(worksheet.Bool("L2MLAT"));

            _MergedFeed.SetListeners(_Components);
            _MergedFeed.IcaoTimeout = worksheet.Int("IcaoTimeout");
            _MergedFeed.IgnoreAircraftWithNoPosition = worksheet.Bool("IgnoreNoPos");
            var startTime = new DateTime(2013, 10, 8, 14, 56, 21, 0);

            for (var i = 1; i <= 3; ++i)
            {
                var listenerNumberName = String.Format("Listener{0}", i);
                var icaoName           = String.Format("ICAO{0}", i);
                var msOffsetName       = String.Format("MSOffset{0}", i);
                var hasPosnName        = String.Format("HasPosn{0}", i);
                var hasHeadName        = String.Format("HasHead{0}", i);
                var hasSpeedName       = String.Format("HasSpeed{0}", i);
                var isMlatName         = String.Format("IsMlat{0}", i);
                var passesName         = String.Format("Passes{0}", i);
                var isOutOfBandName    = String.Format("OOB{0}", i);

                if (worksheet.String(listenerNumberName) != null)
                {
                    var listenerNumber  = worksheet.Int(listenerNumberName);
                    var icao            = worksheet.String(icaoName);
                    var msOffset        = worksheet.Int(msOffsetName);
                    var hasZeroPosn     = worksheet.String(hasPosnName) == "0";
                    var hasPosn         = hasZeroPosn ? true : worksheet.Bool(hasPosnName);
                    var hasHead         = worksheet.Bool(hasHeadName);
                    var hasSpeed        = worksheet.Bool(hasSpeedName);
                    var isMlat          = worksheet.Bool(isMlatName);
                    var resetExpected   = worksheet.String(passesName) == "True";
                    var messageExpected = resetExpected || worksheet.String(passesName) == "NoReset";
                    var isOutOfBand     = worksheet.Bool(isOutOfBandName);

                    Mock <IListener> listener;
                    switch (listenerNumber)
                    {
                    case 1:     listener = _Listener1; break;

                    case 2:     listener = _Listener2; break;

                    default:    throw new NotImplementedException();
                    }

                    _Clock.UtcNowValue = startTime.AddMilliseconds(msOffset);

                    var baseStationMessageEventArgs = new BaseStationMessageEventArgs(new BaseStationMessage()
                    {
                        Icao24 = icao
                    });
                    if (hasZeroPosn)
                    {
                        baseStationMessageEventArgs.Message.Latitude = baseStationMessageEventArgs.Message.Longitude = 0.0;
                    }
                    else if (hasPosn)
                    {
                        baseStationMessageEventArgs.Message.Latitude = baseStationMessageEventArgs.Message.Longitude = 1.0;
                    }
                    if (hasHead)
                    {
                        baseStationMessageEventArgs.Message.Track = 2;
                    }
                    if (hasSpeed)
                    {
                        baseStationMessageEventArgs.Message.GroundSpeed = 3;
                    }
                    if (isMlat)
                    {
                        baseStationMessageEventArgs.Message.IsMlat = true;
                    }

                    var baseStationMessageEventRecorder = new EventRecorder <BaseStationMessageEventArgs>();
                    _MergedFeed.Port30003MessageReceived += baseStationMessageEventRecorder.Handler;

                    var positionResetEventArgs     = new EventArgs <string>(icao);
                    var positionResetEventRecorder = new EventRecorder <EventArgs <string> >();
                    _MergedFeed.PositionReset += positionResetEventRecorder.Handler;

                    listener.Raise(r => r.Port30003MessageReceived += null, baseStationMessageEventArgs);
                    listener.Raise(r => r.PositionReset            += null, positionResetEventArgs);

                    var failDetails = String.Format("Failed on message {0} {{0}}", i);
                    if (!messageExpected)
                    {
                        Assert.AreEqual(0, baseStationMessageEventRecorder.CallCount, failDetails, "BaseStationMessage");
                        Assert.AreEqual(0, positionResetEventRecorder.CallCount, failDetails, "PostionReset");
                    }
                    else
                    {
                        Assert.AreEqual(1, baseStationMessageEventRecorder.CallCount, failDetails, "BaseStationMessage");
                        Assert.AreSame(_MergedFeed, baseStationMessageEventRecorder.Sender);

                        Assert.AreSame(baseStationMessageEventArgs.Message, baseStationMessageEventRecorder.Args.Message);
                        Assert.AreEqual(isOutOfBand, baseStationMessageEventRecorder.Args.IsOutOfBand);

                        if (!resetExpected)
                        {
                            Assert.AreEqual(0, positionResetEventRecorder.CallCount, failDetails, "PostionReset");
                        }
                        else
                        {
                            Assert.AreEqual(1, positionResetEventRecorder.CallCount, failDetails, "PositionReset");
                            Assert.AreSame(_MergedFeed, positionResetEventRecorder.Sender);
                            Assert.AreSame(positionResetEventArgs, positionResetEventRecorder.Args);
                        }
                    }
                }
            }
        }
Beispiel #23
0
 protected virtual void OnPort30003MessageReceived(BaseStationMessageEventArgs args)
 {
     EventHelper.RaiseQuickly(Port30003MessageReceived, this, args);
 }
Beispiel #24
0
 public MessageReceived(DateTime receivedUtc, IListener listener, BaseStationMessageEventArgs message)
 {
     ReceivedUtc = receivedUtc;
     Listener    = listener;
     MessageArgs = message;
 }
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="aircraftListJson"></param>
        /// <returns></returns>
        public IEnumerable <BaseStationMessageEventArgs> ConvertIntoBaseStationMessageEventArgs(AircraftListJson aircraftListJson)
        {
            var result = new List <BaseStationMessageEventArgs>();

            foreach (var json in aircraftListJson.Aircraft)
            {
                var message = new BaseStationMessage()
                {
                    MessageType      = BaseStationMessageType.Transmission,
                    TransmissionType = BaseStationTransmissionType.AirToAir,        // This needs to be something other than "None" or "AllCallReply" if we want to have these messages work with the message compressor
                    StatusCode       = BaseStationStatusCode.None,
                };

                if (json.Callsign != null)
                {
                    message.Callsign = json.Callsign;
                }
                if (json.Emergency != null)
                {
                    message.Emergency = json.Emergency;
                }
                if (json.GroundSpeed != null)
                {
                    message.GroundSpeed = json.GroundSpeed;
                }
                if (json.Icao24 != null)
                {
                    message.Icao24 = json.Icao24;
                }
                if (json.OnGround != null)
                {
                    message.OnGround = json.OnGround;
                }
                if (json.SignalLevel != null)
                {
                    message.SignalLevel = json.SignalLevel;
                }
                if (json.Track != null)
                {
                    message.Track = json.Track;
                }
                if (json.VerticalRate != null)
                {
                    message.VerticalRate = json.VerticalRate;
                }

                if (json.Latitude != null || json.Longitude != null)
                {
                    if (json.Latitude != null)
                    {
                        message.Latitude = json.Latitude;
                    }
                    if (json.Longitude != null)
                    {
                        message.Longitude = json.Longitude;
                    }
                    if (json.PositionIsMlat != null)
                    {
                        message.IsMlat = json.PositionIsMlat.Value;
                    }
                }

                if (json.Squawk != null)
                {
                    int squawk;
                    if (int.TryParse(json.Squawk, out squawk))
                    {
                        message.Squawk = squawk;
                    }
                }

                if (json.AltitudeType != null)
                {
                    AddSupplementaryValue(message, r => r.AltitudeIsGeometric = json.AltitudeType == 1);
                }
                if (json.CallsignIsSuspect != null)
                {
                    AddSupplementaryValue(message, r => r.CallsignIsSuspect = json.CallsignIsSuspect);
                }
                if (json.SpeedType != null)
                {
                    AddSupplementaryValue(message, r => r.SpeedType = (SpeedType)json.SpeedType);
                }
                if (json.TargetAltitude != null)
                {
                    AddSupplementaryValue(message, r => r.TargetAltitude = json.TargetAltitude);
                }
                if (json.TargetTrack != null)
                {
                    AddSupplementaryValue(message, r => r.TargetHeading = json.TargetTrack);
                }
                if (json.TrackIsHeading != null)
                {
                    AddSupplementaryValue(message, r => r.TrackIsHeading = json.TrackIsHeading);
                }
                if (json.TransponderType != null)
                {
                    AddSupplementaryValue(message, r => r.TransponderType = (TransponderType)json.TransponderType);
                }
                if (json.VerticalRateType != null)
                {
                    AddSupplementaryValue(message, r => r.VerticalRateIsGeometric = json.VerticalRateType == 1);
                }
                if (json.AirPressureInHg != null)
                {
                    AddSupplementaryValue(message, r => r.PressureSettingMb = AirPressure.InHgToMillibars(json.AirPressureInHg));
                }

                if (json.Altitude != null)
                {
                    // When pressure altitude calculations were introduced the sending side was modified to
                    // send Altitude, GeometricAltitude and AltitudeType as a set. However, before that was
                    // introduced they'd only be sent if they changed.
                    if (json.GeometricAltitude == null || json.AltitudeType == null)
                    {
                        message.Altitude = json.Altitude;
                    }
                    else
                    {
                        switch (json.AltitudeType)
                        {
                        case (int)AltitudeType.Barometric:
                            message.Altitude = json.Altitude;
                            break;

                        case (int)AltitudeType.Geometric:
                            message.Altitude = json.GeometricAltitude;
                            break;

                        default:
                            throw new NotImplementedException();
                        }
                    }
                }

                var eventArgs = new BaseStationMessageEventArgs(message, isOutOfBand: false, isSatcomFeed: json.IsSatcomFeed);
                result.Add(eventArgs);
            }

            return(result);
        }