示例#1
0
        void EventHandler(object sender, LogsMonitorEventArgs logsMonitorEventArgs)
        {
            // note: event needs to be triggered regardless of skill being already known and up to date

            // there is no point in updating skill values, if server is not known
            var currentSvr = currentServer;

            if (currentSvr == null)
            {
                return;
            }

            SkillEntryParser parser    = new SkillEntryParser(logger);
            bool             anyParsed = false;

            foreach (var wurmLogEntry in logsMonitorEventArgs.WurmLogEntries)
            {
                SkillInfo skillInfo = parser.TryParseSkillInfoFromLogLine(wurmLogEntry);
                if (skillInfo != null)
                {
                    skillInfo.Server = currentSvr;
                    changedSkills.Enqueue(skillInfo);
                    skillsMap.UpdateSkill(skillInfo, currentSvr);
                    anyParsed = true;
                }
            }

            if (anyParsed)
            {
                onSkillsChanged.Trigger();
            }
        }
示例#2
0
        private async Task ScanLogsHistory(TimeSpan maxTimeToLookBackInLogs)
        {
            DateTime maxDate = await currentServerLookupFinished.Task.ConfigureAwait(false);

            DateTime minDate = maxDate.SubtractConstrain(maxTimeToLookBackInLogs);

            // if already scanned, optimize
            if (scannedMinDate != null)
            {
                if (minDate >= scannedMinDate)
                {
                    // do not scan, if this period has already been scanned
                    return;
                }
                maxDate = scannedMinDate.Value;
            }

            var entries = await logsHistory.ScanAsync(new LogSearchParameters()
            {
                CharacterName = character.Name.Normalized,
                LogType       = LogType.Skills,
                MinDate       = minDate,
                MaxDate       = maxDate
            }).ConfigureAwait(false);

            SkillEntryParser parser = new SkillEntryParser(logger);

            foreach (var wurmLogEntry in entries)
            {
                SkillInfo skillInfo = parser.TryParseSkillInfoFromLogLine(wurmLogEntry);
                if (skillInfo != null)
                {
                    var entryServer =
                        await
                        character.TryGetHistoricServerAtLogStampAsync(wurmLogEntry.Timestamp).ConfigureAwait(false);

                    if (entryServer != null)
                    {
                        skillInfo.Server = entryServer;
                        skillsMap.UpdateSkill(skillInfo, entryServer);
                    }
                    else
                    {
                        logger.Log(LogLevel.Info,
                                   "Skill info rejected, server could not be identified for this entry: " + wurmLogEntry,
                                   this,
                                   null);
                    }
                }
            }

            scannedMinDate = minDate;
        }
示例#3
0
        Dictionary <string, float> ParseDump()
        {
            var fileLines = File.ReadAllLines(dumpInfo.FileInfo.FullName);
            Dictionary <string, float> skills = new Dictionary <string, float>();
            var parser = new SkillEntryParser(logger);

            foreach (var line in fileLines)
            {
                if (line.StartsWith("Skills") ||
                    line.StartsWith("Characteristics") ||
                    line.StartsWith("Religion") ||
                    line.StartsWith("-----"))
                {
                    continue;
                }
                var match     = Regex.Match(line, @"(.+): (.+) .+ .+", RegexOptions.Compiled | RegexOptions.CultureInvariant);
                var skillName = match.Groups[1].Value.Trim();
                if (string.IsNullOrEmpty(skillName))
                {
                    logger.Log(LogLevel.Error,
                               string.Format("Unparseable skill name in dump file {0}, raw line: {1}",
                                             dumpInfo.FileInfo.FullName,
                                             line),
                               this,
                               null);
                    continue;
                }
                var level = parser.TryParseFloatInvariant(match.Groups[2].Value);
                if (level == null)
                {
                    logger.Log(LogLevel.Error,
                               string.Format("Unparseable skill value in dump file {0}, raw line: {1}",
                                             dumpInfo.FileInfo.FullName,
                                             line),
                               this,
                               null);
                    continue;
                }
                skills[WurmSkills.NormalizeSkillName(skillName)] = level.Value;
            }
            return(skills);
        }