/// <summary> /// Tries to load data from the population report cache /// </summary> /// <returns>True if data is loaded; otherwise - false</returns> private bool TryLoadCachedData() { if (populationData != null) { return(true); } lock (syncLock) { if (populationData != null) { return(true); } var reportFileInfo = new FileInfo(ReportFile); if (reportFileInfo.Exists) { resetOnRead = reportFileInfo.Length > MaxReportFileSize; try { using (var fs = new FileStream(ReportFile, FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) { populationData = Serializer.Deserialize <PopulationReportCache>(fs); LoadPlayerTypes(); return(true); } } catch (Exception ex) { LogProvider.Log.Error(this, $"Population report could not be loaded from '{ReportFile}'", ex); } } populationData = new PopulationReportCache { Report = new List <PopulationReportIndicators>() }; } return(false); }
/// <summary> /// Gets population data /// </summary> public IEnumerable <ReportIndicators> GetReport(bool forceRefresh, CancellationToken cancellationToken) { try { if (!TryLoadCachedData()) { ValidateCache(); BuildReportData(cancellationToken); } else if (!ValidateCache() || forceRefresh) { BuildReportData(cancellationToken); } return(populationData.Report.ToList()); } finally { if (resetOnRead) { populationData = null; } } }