async Task FindLatestDumpForServerGroup(ServerGroup serverGroup) { var beginDate = Time.Get.LocalNowOffset; var maxBackDate = Time.Get.LocalNow - MaxDaysBack; SkillDumpInfo[] dumps = new SkillDumpInfo[0]; if (skillDumpsDirectory.Exists) { dumps = skillDumpsDirectory.GetFiles().Select(ConvertFileInfoToSkillDumpInfo) .Where(info => info != null && info.Stamp > maxBackDate) .OrderByDescending(info => info.Stamp) .ToArray(); } SkillDump foundDump = null; foreach (var dumpInfo in dumps) { var server = await character.TryGetHistoricServerAtLogStampAsync(dumpInfo.Stamp).ConfigureAwait(false); if (server != null) { if (server.ServerGroup == serverGroup) { foundDump = new RealSkillDump(serverGroup, dumpInfo, logger); break; } } else { logger.Log(LogLevel.Info, "Could not identify server for skill dump: " + dumpInfo.FileInfo.FullName, this, null); } } if (foundDump != null) { latestSkillDumps[serverGroup] = foundDump; } else { // if nothing found, place a stub to prevent another file search latestSkillDumps[serverGroup] = new StubSkillDump(serverGroup); } lastRebuild = beginDate; }
public RealSkillDump(ServerGroup serverGroup, [NotNull] SkillDumpInfo dumpInfo, [NotNull] IWurmApiLogger logger) : base(serverGroup) { if (dumpInfo == null) { throw new ArgumentNullException(nameof(dumpInfo)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } this.dumpInfo = dumpInfo; this.logger = logger; skillLevels = ParseDump(); }