コード例 #1
0
        public EarthquakeFeedService(IEventAggregator eventAggregator,
                                     IHttpClient httpClient,
                                     IWorldCitiesRepository worldCitiesRepository,
                                     IEarthquakeApiQueryBuilder earthquakeApiQueryBuilder,
                                     IEarthquakeFeedServiceConfig config,
                                     IEarthquakeActivityCollectionBuilder earthquakeActivityCollectionBuilder)
        {
            _eventAggregator = eventAggregator;
            _earthquakeActivityCollectionBuilder = earthquakeActivityCollectionBuilder;
            _httpClient                = httpClient;
            _worldCitiesRepository     = worldCitiesRepository;
            _earthquakeApiQueryBuilder = earthquakeApiQueryBuilder;
            _config = config;
            _earthquakeActivityCollectionBuilder = earthquakeActivityCollectionBuilder;


            _timeFeedStarted = _lastFeedRetrievalTime.Subtract(config.InitialLoadHistoryTimeSpan);

            _initialLoadHistoryEarthquakeActivitiesTask =
                Task.Run(() => LoadEarthQuakeHistory(_timeFeedStarted, _lastFeedRetrievalTime));

            _cancellationTokenSource = new CancellationTokenSource();
            _cancellationToken       = _cancellationTokenSource.Token;

            _timer = new Timer(TimerTick);
            _timer.Change(config.RefreshInterval, config.RefreshInterval);

            Status = string.Format("Past {0} hrs activity retrieval started", config.InitialLoadHistoryTimeSpan.TotalHours);
        }
        public List <EarthquakeActivity> BuildEarthquakeActivities(dynamic earthquakeActivity, IWorldCitiesRepository worldCitiesRepository, int numberOfNearestCities)
        {
            int count = earthquakeActivity.features.Count;
            List <EarthquakeActivity> earthquakeActivities = new List <EarthquakeActivity>();

            for (int i = 0; i < count; i++)
            {
                double   mag           = earthquakeActivity.features[i].properties.mag;
                long     time          = earthquakeActivity.features[i].properties.time;
                DateTime dt            = _timeHelper.FromUnixTime(time);
                double   longitude     = earthquakeActivity.features[i].geometry.coordinates[0];
                double   latitude      = earthquakeActivity.features[i].geometry.coordinates[1];
                var      geocoordinate = new GeoCoordinate(latitude, longitude);
                earthquakeActivities.Add(new EarthquakeActivity()
                {
                    DateTime       = dt,
                    Magnitude      = mag,
                    Location       = geocoordinate,
                    AffectedCities = worldCitiesRepository.GetCitiesNearLocation(geocoordinate, numberOfNearestCities).ToList()
                }
                                         );
            }
            return(earthquakeActivities);
        }