Exemplo n.º 1
0
 void IObserver <TData> .OnCompleted()
 {
     Status = FeedStatus.NotAvailable;
     unsubscribeFromSource();
     //TODO: Previousely it was async, may cause lags.
     subscribeToSource();
 }
Exemplo n.º 2
0
        /// <summary>
        /// Updates the display of a feed detail if anything has changed.
        /// </summary>
        /// <param name="feed"></param>
        /// <param name="feedDetail"></param>
        /// <param name="forceRefresh"></param>
        private void UpdateFeedDisplay(FeedStatus feed, FeedDetail feedDetail, bool forceRefresh)
        {
            var item = feedDetail.ListViewItem;

            if (forceRefresh || feed.Name != feedDetail.Name)
            {
                item.SubItems[0].Text = feed.Name;
                feedDetail.Name       = feed.Name;
            }

            if (forceRefresh || feed.ConnectionStatus != feedDetail.ConnectionStatus)
            {
                item.SubItems[1].Text       = feed.ConnectionStatusDescription;
                feedDetail.ConnectionStatus = feed.ConnectionStatus;
            }

            if (forceRefresh || feed.TotalMessages != feedDetail.TotalMessages)
            {
                item.SubItems[2].Text    = feed.TotalMessages.ToString("N0");
                feedDetail.TotalMessages = feed.TotalMessages;
            }

            if (forceRefresh || feed.TotalBadMessages != feedDetail.TotalBadMessages)
            {
                item.SubItems[3].Text       = feed.TotalBadMessages.ToString("N0");
                feedDetail.TotalBadMessages = feed.TotalBadMessages;
            }

            if (forceRefresh || feed.HasAircraftList != feedDetail.HasAircraftList || feed.TotalAircraft != feedDetail.AircraftCount)
            {
                item.SubItems[4].Text    = feed.HasAircraftList ? feed.TotalAircraft.ToString("N0") : Strings.NotApplicableAbbr;
                feedDetail.AircraftCount = feed.TotalAircraft;
            }
        }
Exemplo n.º 3
0
        private void unsubscribe()
        {
            if (--_count != 0)
            {
                return;
            }

            Status = FeedStatus.NotSubscribed;
            unsubscribeFromSource();
        }
Exemplo n.º 4
0
        /// <summary>
        /// Returns the feed counter for a feed.
        /// </summary>
        /// <param name="uniqueId"></param>
        /// <returns></returns>
        private FeedStatus GetFeedCounter(int uniqueId)
        {
            FeedStatus result = null;

            _FeedCounterMapSpinLock.Lock();
            try {
                _FeedCounterMap.TryGetValue(uniqueId, out result);
            } finally {
                _FeedCounterMapSpinLock.Unlock();
            }

            return(result);
        }
Exemplo n.º 5
0
 public void RefreshFromFeedStatus(FeedStatus feedStatus)
 {
     Id              = feedStatus.FeedId;
     Name            = feedStatus.Name;
     Merged          = feedStatus.IsMergedFeed;
     Polar           = feedStatus.HasPolarPlot;
     HasAircraftList = feedStatus.HasAircraftList;
     Connection      = feedStatus.ConnectionStatus;
     ConnDesc        = feedStatus.ConnectionStatusDescription;
     Msgs            = feedStatus.TotalMessages;
     BadMsgs         = feedStatus.TotalBadMessages;
     Tracked         = feedStatus.TotalAircraft;
 }
Exemplo n.º 6
0
        /// <summary>
        /// Adds or updates a feed counter in <see cref="_FeedCounterMap"/>.
        /// </summary>
        /// <param name="feed"></param>
        /// <param name="suppressCultureSwitch"></param>
        private FeedStatus UpdateFeedCounter(IFeed feed, bool suppressCultureSwitch = false)
        {
            var cultureSwitcher = suppressCultureSwitch ? null : new CultureSwitcher();

            try {
                FeedStatus feedStatus;
                _FeedCounterMapSpinLock.Lock();
                try {
                    if (!_FeedCounterMap.TryGetValue(feed.UniqueId, out feedStatus))
                    {
                        feedStatus = new FeedStatus()
                        {
                            FeedId = feed.UniqueId,
                        };
                        _FeedCounterMap.Add(feedStatus.FeedId, feedStatus);
                    }
                } finally {
                    _FeedCounterMapSpinLock.Unlock();
                }

                var listener     = feed.Listener;
                var aircraftList = feed.AircraftList;
                var noValue      = listener == null || aircraftList == null;

                var isMerged                    = noValue ? false : listener is IMergedFeedListener;
                var hasPolarPlot                = noValue ? false : aircraftList.PolarPlotter != null;
                var hasAircraftList             = noValue ? false : aircraftList.IsTracking;
                var connectionStatus            = noValue ? ConnectionStatus.Disconnected : feed.Listener.ConnectionStatus;
                var connectionStatusDescription = Describe.ConnectionStatus(connectionStatus);
                var totalAircraft               = noValue ? 0 : aircraftList.Count;
                var totalBadMessages            = noValue ? 0 : listener.TotalBadMessages;
                var totalMessages               = noValue ? 0 : listener.TotalMessages;

                _FeedStatusHelper.Update(feedStatus, feedStatus.ConnectionStatus, connectionStatus, (r, v) => r.ConnectionStatus = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.ConnectionStatusDescription, connectionStatusDescription, (r, v) => r.ConnectionStatusDescription = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.HasAircraftList, hasAircraftList, (r, v) => r.HasAircraftList = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.HasPolarPlot, hasPolarPlot, (r, v) => r.HasPolarPlot          = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.IsMergedFeed, isMerged, (r, v) => r.IsMergedFeed = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.Name, feed.Name, (r, v) => r.Name = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.TotalAircraft, totalAircraft, (r, v) => r.TotalAircraft          = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.TotalBadMessages, totalBadMessages, (r, v) => r.TotalBadMessages = v);
                _FeedStatusHelper.Update(feedStatus, feedStatus.TotalMessages, totalMessages, (r, v) => r.TotalMessages          = v);

                return(feedStatus);
            } finally {
                if (cultureSwitcher != null)
                {
                    cultureSwitcher.Dispose();
                }
            }
        }
Exemplo n.º 7
0
        void IObserver <TData> .OnError(Exception exception)
        {
            if (Interlocked.Increment(ref _subscriptionAttempt) == 1)
            {
                Logger.WarnFormat(exception, "Feed lost. Channel '{0}', Context: {1} ({2}) ", _channelName, _context, typeof(TContext));
            }
            else
            {
                Logger.DebugFormat("Failed to resubscribe for feed on channel '{0}', Context: {1} ({2}). Attempt #{3} ", _channelName, _context, typeof(TContext), _subscriptionAttempt);
            }
            Status = FeedStatus.NotAvailable;
            unsubscribeFromSource();

            //Schedule source observable resubscription
            _retryTask = _resubscriptionPolicy.InitResubscription(subscribeToSource, exception); // Scheduler.TaskPool.Schedule(subscribeToSource, TimeSpan.FromMilliseconds(_retryPeriod));
        }
Exemplo n.º 8
0
        public static string ToString(FeedStatus status)
        {
            switch (status)
            {
            case FeedStatus.InProgress:
            case FeedStatus.Submitted:
                return("Submitted");

            case FeedStatus.Processed:
                return("Processed");

            case FeedStatus.ProcessedWithErrors:
            case FeedStatus.ProcessedWithWarnings:
                return("Processed with errors");
            }
            return("n/a");
        }
Exemplo n.º 9
0
 /// <summary>
 /// Updates the display for a single feed.
 /// </summary>
 /// <param name="feed"></param>
 public void ShowFeed(FeedStatus feed)
 {
     if (InvokeRequired)
     {
         try {
             BeginInvoke(new MethodInvoker(() => { ShowFeed(feed); }));
         } catch (InvalidOperationException) {
             ; // Required for mono
         }
     }
     else
     {
         var feedDetails = GetFeedDetails();
         var feedDetail  = feedDetails.FirstOrDefault(r => r.UniqueId == feed.FeedId);
         if (feedDetail != null)
         {
             UpdateFeedDisplay(feed, feedDetail, forceRefresh: false);
             listView.Sort();
         }
     }
 }
Exemplo n.º 10
0
        private void subscribeToSource()
        {
            lock (_syncRoot)
            {
                switch (_subscriptionAttempt)
                {
                case 0:
                    Logger.InfoFormat("Subscribing for feed on channel '{0}', Context: {1} ({2}) ", _channelName, _context, typeof(TContext));
                    break;

                case 1:
                    Logger.InfoFormat("Resubscribing for feed on channel '{0}', Context: {1} ({2}). Attempt #{3} ", _channelName, _context, typeof(TContext), _subscriptionAttempt);
                    break;

                default:
                    Logger.DebugFormat("Resubscribing for feed on channel '{0}', Context: {1} ({2}). Attempt #{3} ", _channelName, _context, typeof(TContext), _subscriptionAttempt);
                    break;
                }
                Status = FeedStatus.Subscribing;
                var source   = _feedProvider.CreateFeed(_context);
                var deferred = source as DeferredObservable <TData>;
                if (deferred == null)
                {
                    _subscribtion = source.Subscribe(this);
                    if (Status == FeedStatus.Subscribing)
                    {
                        Status = FeedStatus.Available;
                    }
                    return;
                }

                deferred.Subscribe(this, () =>
                {
                    if (Status == FeedStatus.Subscribing)
                    {
                        Status = FeedStatus.Available;
                    }
                });
            }
        }
Exemplo n.º 11
0
 /// <summary>
 /// See interface docs.
 /// </summary>
 /// <param name="feed"></param>
 public void ShowFeedConnectionStatus(FeedStatus feed)
 {
     feedStatusControl.ShowFeed(feed);
 }
Exemplo n.º 12
0
 public void ShowFeedConnectionStatus(FeedStatus feed)
 {
     ;
 }
Exemplo n.º 13
0
 public FeedStatusModel(FeedStatus feedStatus) : this()
 {
     RefreshFromFeedStatus(feedStatus);
 }
Exemplo n.º 14
0
 public void Dispose()
 {
     _subject.OnCompleted();
     unsubscribeFromSource();
     Status = FeedStatus.NotSubscribed;
 }