Beispiel #1
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="mergedFeed"></param>
        /// <param name="mergeFeeds"></param>
        public void Initialise(MergedFeed mergedFeed, IEnumerable <IFeed> mergeFeeds)
        {
            if (_Initialised)
            {
                throw new InvalidOperationException("A feed can only be initialised once");
            }
            if (mergedFeed == null)
            {
                throw new ArgumentNullException("receiver");
            }
            if (mergeFeeds == null)
            {
                throw new ArgumentNullException("mergePathways");
            }
            if (!mergedFeed.Enabled)
            {
                throw new InvalidOperationException($"The {mergedFeed.Name} merged feed has not been enabled");
            }

            var mergedListeners = GetListenersFromMergeFeeds(mergedFeed, mergeFeeds);

            var mergedFeedListener = Factory.Resolve <IMergedFeedListener>();

            Listener = mergedFeedListener;
            Listener.ExceptionCaught      += Listener_ExceptionCaught;
            Listener.IgnoreBadMessages     = true;
            Listener.AssumeDF18CF1IsIcao   = false;
            mergedFeedListener.IcaoTimeout = mergedFeed.IcaoTimeout;
            mergedFeedListener.IgnoreAircraftWithNoPosition = mergedFeed.IgnoreAircraftWithNoPosition;
            mergedFeedListener.SetListeners(mergedListeners);

            DoCommonInitialise(mergedFeed.UniqueId, mergedFeed.Name, false, mergedFeed.ReceiverUsage, startAircraftList: true);
        }
Beispiel #2
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="mergedFeed"></param>
        /// <param name="mergeFeeds"></param>
        public void ApplyConfiguration(MergedFeed mergedFeed, IEnumerable <IFeed> mergeFeeds)
        {
            if (!_Initialised)
            {
                throw new InvalidOperationException("ApplyConfiguration cannot be called on an uninitialised feed");
            }
            if (mergedFeed == null)
            {
                throw new ArgumentNullException("mergedFeed");
            }
            if (mergeFeeds == null)
            {
                throw new ArgumentNullException("mergePathways");
            }
            if (mergedFeed.UniqueId != UniqueId)
            {
                throw new InvalidOperationException($"Cannot apply configuration for merged feed #{mergedFeed.UniqueId} to feed for merged feed for #{UniqueId}");
            }

            var mergedFeedListener = Listener as IMergedFeedListener;

            if (mergedFeedListener == null)
            {
                throw new InvalidOperationException($"ReceiverPathway {UniqueId} was initialised with a receiver but updated with a merged feed");
            }

            Name = mergedFeed.Name;
            SetIsVisible(mergedFeed.ReceiverUsage);

            var listeners = GetListenersFromMergeFeeds(mergedFeed, mergeFeeds);

            mergedFeedListener.IcaoTimeout = mergedFeed.IcaoTimeout;
            mergedFeedListener.IgnoreAircraftWithNoPosition = mergedFeed.IgnoreAircraftWithNoPosition;
            mergedFeedListener.SetListeners(listeners);
        }
Beispiel #3
0
        private void CreateFeedForMergedFeed(MergedFeed mergedFeed, IEnumerable <IFeed> allReceiverPathways, List <IFeed> feeds)
        {
            var mergeFeeds = allReceiverPathways.Where(r => mergedFeed.ReceiverIds.Contains(r.UniqueId)).ToArray();
            var feed       = Factory.Resolve <IFeed>();

            feed.Initialise(mergedFeed, mergeFeeds);
            AttachFeed(feed, feeds);
        }
Beispiel #4
0
        void OnlyUseTwoReceiversAndNoMergedFeed()
        {
            _Configuration.Receivers.Remove(_Receiver3);
            _Configuration.Receivers.Remove(_Receiver4);
            _Configuration.MergedFeeds.Clear();

            _Receiver3   = _Receiver4 = null;
            _MergedFeed1 = _MergedFeed2 = null;
        }
        public void ServerMergedFeedJson_ToModel_MergedFeed_Returns_Null_If_MergedFeed_Is_MergeOnly()
        {
            var mergedFeed = new MergedFeed()
            {
                UniqueId = 7, Name = "Hello", ReceiverUsage = ReceiverUsage.MergeOnly
            };

            Assert.IsNull(ServerReceiverJson.ToModel(mergedFeed));
        }
        public void ConfigurationListener_Does_Not_Raise_Events_After_MergedFeed_Is_Detached()
        {
            var record = new MergedFeed();

            _Configuration.MergedFeeds.Add(record);

            _Configuration.MergedFeeds.Remove(record);
            record.UniqueId += 1;

            Assert.IsFalse(RaisedEvent <MergedFeed>(ConfigurationListenerGroup.MergedFeed, r => r.UniqueId, record, isListChild: true));
            Assert.AreEqual(2, _PropertyChanged.CallCount);
        }
        public void ServerReceiverJson_ToModel_MergedFeed_Returns_Model_Based_On_MergedFeed()
        {
            var mergedFeed = new MergedFeed()
            {
                UniqueId = 7, Name = "Hello"
            };

            var model = ServerReceiverJson.ToModel(mergedFeed);

            Assert.AreEqual(7, model.UniqueId);
            Assert.AreEqual("Hello", model.Name);
        }
Beispiel #8
0
        public static void CheckProperties(MergedFeed settings)
        {
            Assert.AreEqual(0, settings.ReceiverIds.Count);
            Assert.AreEqual(0, settings.ReceiverFlags.Count);

            TestUtilities.TestProperty(settings, r => r.Enabled, true);
            TestUtilities.TestProperty(settings, r => r.UniqueId, 0, 1);
            TestUtilities.TestProperty(settings, r => r.Name, null, "ABC");
            TestUtilities.TestProperty(settings, r => r.IcaoTimeout, 3000, 10000);
            TestUtilities.TestProperty(settings, r => r.IgnoreAircraftWithNoPosition, false);
            TestUtilities.TestProperty(settings, r => r.ReceiverUsage, ReceiverUsage.Normal, ReceiverUsage.HideFromWebSite);
        }
Beispiel #9
0
        /// <summary>
        /// Returns a new object from a merged feed.
        /// </summary>
        /// <param name="mergedFeed"></param>
        /// <returns></returns>
        public static ServerReceiverJson ToModel(MergedFeed mergedFeed)
        {
            ServerReceiverJson result = null;

            if (mergedFeed != null && mergedFeed.ReceiverUsage == ReceiverUsage.Normal)
            {
                result = new ServerReceiverJson()
                {
                    UniqueId = mergedFeed.UniqueId,
                    Name     = mergedFeed.Name,
                };
            }

            return(result);
        }
        public void ConfigurationListener_Does_Not_Raise_Events_After_MergedFeedReceiver_Is_Detached()
        {
            var mergedFeed = new MergedFeed();
            var settings   = new MergedFeedReceiver();

            _Configuration.MergedFeeds.Add(new MergedFeed()
            {
                ReceiverFlags = { settings }
            });

            _Configuration.MergedFeeds[0].ReceiverFlags.Remove(settings);
            settings.UniqueId += 1;

            Assert.IsFalse(RaisedEvent <MergedFeed>(ConfigurationListenerGroup.MergedFeedReceiver, r => r.UniqueId, settings, isListChild: true));
            Assert.AreEqual(2, _PropertyChanged.CallCount);
        }
        public void ConfigurationListener_Raises_Events_When_MergedFeedRecevier_Changes()
        {
            foreach (var propertyName in typeof(MergedFeedReceiver).GetProperties().Select(r => r.Name))
            {
                TestCleanup();
                TestInitialise();

                var mergedFeed = new MergedFeed();
                var settings   = new MergedFeedReceiver();
                _Configuration.MergedFeeds.Add(new MergedFeed()
                {
                    ReceiverFlags = { settings }
                });

                SetValue(settings, propertyName, new Dictionary <Expression <Func <MergedFeedReceiver, object> >, Action <MergedFeedReceiver> >()
                {
                    { r => r.UniqueId, r => r.UniqueId += 1 },
                    { r => r.IsMlatFeed, r => r.IsMlatFeed = !r.IsMlatFeed },
                });

                Assert.IsTrue(RaisedEvent(ConfigurationListenerGroup.MergedFeedReceiver, propertyName, settings, isListChild: true), "MergedFeedReceiver.{0}", propertyName);
            }
        }
Beispiel #12
0
        public void TestInitialise()
        {
            _SnapshotFactory = Factory.TakeSnapshot();

            _Manager = Factory.Singleton.Resolve <IFeedManager>();

            _Receiver1 = new Receiver()
            {
                UniqueId = 1, Name = "First", DataSource = DataSource.Port30003, ConnectionType = ConnectionType.TCP, Address = "127.0.0.1", Port = 30003
            };
            _Receiver2 = new Receiver()
            {
                UniqueId = 2, Name = "Second", DataSource = DataSource.Beast, ConnectionType = ConnectionType.COM, ComPort = "COM1", BaudRate = 19200, DataBits = 8, StopBits = StopBits.One
            };
            _Receiver3 = new Receiver()
            {
                UniqueId = 3, Name = "Third", ReceiverUsage = ReceiverUsage.HideFromWebSite,
            };
            _Receiver4 = new Receiver()
            {
                UniqueId = 4, Name = "Fourth", ReceiverUsage = ReceiverUsage.MergeOnly,
            };
            _MergedFeed1 = new MergedFeed()
            {
                UniqueId = 5, Name = "M1", ReceiverIds = { 1, 2 }, ReceiverUsage = ReceiverUsage.Normal,
            };
            _MergedFeed2 = new MergedFeed()
            {
                UniqueId = 6, Name = "M2", ReceiverIds = { 3, 4 }, ReceiverUsage = ReceiverUsage.HideFromWebSite,
            };
            _Configuration = new Configuration()
            {
                Receivers   = { _Receiver1, _Receiver2, _Receiver3, _Receiver4 },
                MergedFeeds = { _MergedFeed1, _MergedFeed2 },
            };
            _ConfigurationStorage = TestUtilities.CreateMockSingleton <IConfigurationStorage>();
            _ConfigurationStorage.Setup(r => r.Load()).Returns(_Configuration);

            _CreatedListeners = new List <Mock <IListener> >();
            _CreatedFeeds     = new List <Mock <IFeed> >();
            _MergedFeedFeeds  = new Dictionary <MergedFeed, List <IFeed> >();
            Factory.Singleton.Register <IFeed>(() => {
                var feed     = TestUtilities.CreateMockInstance <IFeed>();
                var listener = TestUtilities.CreateMockInstance <IListener>();
                _CreatedListeners.Add(listener);

                feed.Setup(r => r.Initialise(It.IsAny <Receiver>(), It.IsAny <Configuration>())).Callback((Receiver rcvr, Configuration conf) => {
                    feed.Setup(i => i.UniqueId).Returns(rcvr.UniqueId);
                    feed.Setup(i => i.Name).Returns(rcvr.Name);
                    feed.Setup(i => i.Listener).Returns(listener.Object);
                    feed.Setup(i => i.IsVisible).Returns(rcvr.ReceiverUsage == ReceiverUsage.Normal);
                });

                feed.Setup(r => r.Initialise(It.IsAny <MergedFeed>(), It.IsAny <IEnumerable <IFeed> >())).Callback((MergedFeed mfeed, IEnumerable <IFeed> feeds) => {
                    feed.Setup(i => i.UniqueId).Returns(mfeed.UniqueId);
                    feed.Setup(i => i.Name).Returns(mfeed.Name);
                    feed.Setup(i => i.Listener).Returns(listener.Object);
                    feed.Setup(i => i.IsVisible).Returns(mfeed.ReceiverUsage == ReceiverUsage.Normal);

                    if (_MergedFeedFeeds.ContainsKey(mfeed))
                    {
                        _MergedFeedFeeds[mfeed] = feeds.ToList();
                    }
                    else
                    {
                        _MergedFeedFeeds.Add(mfeed, feeds.ToList());
                    }
                });

                feed.Setup(r => r.ApplyConfiguration(It.IsAny <MergedFeed>(), It.IsAny <IEnumerable <IFeed> >())).Callback((MergedFeed mfeed, IEnumerable <IFeed> feeds) => {
                    if (_MergedFeedFeeds.ContainsKey(mfeed))
                    {
                        _MergedFeedFeeds[mfeed] = feeds.ToList();
                    }
                    else
                    {
                        _MergedFeedFeeds.Add(mfeed, feeds.ToList());
                    }
                });

                _CreatedFeeds.Add(feed);
                return(feed.Object);
            });

            _ExceptionCaughtRecorder        = new EventRecorder <EventArgs <Exception> >();
            _FeedsChangedRecorder           = new EventRecorder <EventArgs>();
            _ConnectionStateChangedRecorder = new EventRecorder <EventArgs <IFeed> >();
        }
Beispiel #13
0
        private static List <IMergedFeedComponentListener> GetListenersFromMergeFeeds(MergedFeed mergedFeed, IEnumerable <IFeed> mergeFeeds)
        {
            var result = new List <IMergedFeedComponentListener>();

            foreach (var receiverId in mergedFeed.ReceiverIds)
            {
                var feed     = mergeFeeds.FirstOrDefault(r => r.UniqueId == receiverId);
                var listener = feed == null ? null : feed.Listener;
                if (listener != null)
                {
                    var mergedFeedReceiver = mergedFeed.ReceiverFlags.FirstOrDefault(r => r.UniqueId == receiverId);
                    var isMlatFeed         = mergedFeedReceiver == null ? false : mergedFeedReceiver.IsMlatFeed;

                    var mergedFeedComponent = Factory.Resolve <IMergedFeedComponentListener>();
                    mergedFeedComponent.SetListener(listener, isMlatFeed);
                    result.Add(mergedFeedComponent);
                }
            }

            return(result);
        }
Beispiel #14
0
 /// <summary>
 /// Creates a new object.
 /// </summary>
 /// <param name="mergedFeed"></param>
 public CombinedFeed(MergedFeed mergedFeed)
 {
     MergedFeed = mergedFeed;
     MergedFeed.PropertyChanged += Wrapped_PropertyChanged;
 }
 /// <summary>
 /// Unhooks the child records on a merged feed.
 /// </summary>
 /// <param name="record"></param>
 private void MergedFeed_UnhookChild(MergedFeed record)
 {
     UnhookList <MergedFeedReceiver>(record.ReceiverFlags, _HookedMergedFeedReceivers, MergedFeedReceiver_PropertyChanged, MergedFeedReceviers_ListChanged);
 }