コード例 #1
0
 /// <summary>
 /// Called when the online lookup manager has finished fetching aircraft details for some aircraft.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 /// <remarks>
 /// Note that in principle we might not have asked for any of the aircraft that were fetched, it's all done
 /// via singleton objects so it could be something else that asked for these.
 /// </remarks>
 private void AircraftOnlineLookupManager_AircraftFetched(object sender, AircraftOnlineLookupEventArgs args)
 {
     try {
         foreach (var onlineAircraft in args.AircraftDetails)
         {
             CallWithinFetchLock(onlineAircraft.Icao.ToUpper(), (string icao24, AircraftDetail detail, bool isFirstFetch, IAircraft aircraft) => {
                 return(ApplyDatabaseRecord(detail, detail.Aircraft, onlineAircraft, aircraft, isFirstFetch));
             });
         }
     } catch (ThreadAbortException) {
         // Gets rethrown
     } catch (Exception ex) {
         var log = Factory.ResolveSingleton <ILog>();
         log.WriteLine("Caught exception during application of online lookup aircraft: {0}", ex.ToString());
     }
 }
コード例 #2
0
        /// <summary>
        /// Called when an response is received from the online lookup.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void AircraftOnlineLookup_AircraftFetched(object sender, AircraftOnlineLookupEventArgs args)
        {
            var hasChanged = false;

            lock (_SyncLock) {
                hasChanged = RemoveOldEntries();

                var now        = DateTime.UtcNow;
                var startCount = _LogEntries.Count;

                foreach (var aircraftDetail in args.AircraftDetails)
                {
                    _LogEntries.AddLast(new AircraftOnlineLookupLogEntry()
                    {
                        ResponseUtc = now,
                        Icao        = aircraftDetail.Icao,
                        Detail      = aircraftDetail,
                    });
                }

                foreach (var missingIcao in args.MissingIcaos)
                {
                    _LogEntries.AddLast(new AircraftOnlineLookupLogEntry()
                    {
                        ResponseUtc = now,
                        Icao        = missingIcao,
                    });
                }

                if (_LogEntries.Count != startCount)
                {
                    hasChanged = true;
                }
            }

            if (hasChanged)
            {
                OnResponsesChanged(EventArgs.Empty);
            }
        }
コード例 #3
0
        /// <summary>
        /// Called when the online lookup service has finished fetching aircraft details.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void AircraftOnlineLookup_AircraftFetched(object sender, AircraftOnlineLookupEventArgs args)
        {
            try {
                var cacheEntries      = _CacheEntries;
                var firstEnabledCache = cacheEntries.FirstOrDefault(r => r.Cache.Enabled);
                if (firstEnabledCache != null)
                {
                    if (args.AircraftDetails.Count > 0)
                    {
                        firstEnabledCache.Cache.SaveMany(args.AircraftDetails);
                    }
                    if (args.MissingIcaos.Count > 0)
                    {
                        firstEnabledCache.Cache.RecordManyMissing(args.MissingIcaos);
                    }
                }

                OnAircraftFetched(args);
            } catch (ThreadAbortException) {
            } catch (Exception ex) {
                var log = Factory.Singleton.ResolveSingleton <ILog>();
                log.WriteLine("Caught exception in AircraftOnlineLookupManager during AircraftFetched: {0}", ex);
            }
        }
コード例 #4
0
 /// <summary>
 /// Raises <see cref="AircraftFetched"/>. Note that the class is sealed, hence why this is private
 /// instead of virtual.
 /// </summary>
 /// <param name="args"></param>
 private void OnAircraftFetched(AircraftOnlineLookupEventArgs args)
 {
     EventHelper.Raise(AircraftFetched, this, args);
 }