private void logReader_Tick(object sender, EventArgs e) { logReader.Stop(); foreach (byte[] logdata in logmemoryInfo.GetNewLogsData()) { FFXIVLog log = FFXIVLog.ParseSingleLog(logdata); FFXIVLogDataSet.AnaylzedRow row = logParser.Add(log); var msg = log.LogBodyReplaceTabCode; SetStatus(msg.StartsWith(":") ? msg.Substring(1) : msg); ClearActorList(row); Mark(log); RejectPTMember(log); ParseActor(row, ActorType.FROM); ParseActor(row, ActorType.TO); Display(); } if (logCount < logParser.ds.Anaylzed.Count - 100) { logCount = logParser.ds.Anaylzed.Count; } logReader.Start(); }
private void RejectPTMember(FFXIVLog log) { Regex regex = new Regex(@"(?<name>[A-Z][a-z']+? [A-Z][a-z']+?):.*"); Match match = regex.Match(log.LogBodyReplaceTabCode); if (match.Success) { string name = match.Groups["name"].Value; var pvpActor = FindOrCreatePvPActor(name); pvpActor.isPTMember = true; actors[name] = pvpActor; } }
private void UpdateTargetImage(FFXIVLog log) { var regex = new Regex(@"^:(?<name>[A-Z][a-z']+? [A-Z][a-z']+?)$"); var match = regex.Match(log.LogBodyReplaceTabCode); if (match.Success) { string name = match.Groups["name"].Value; if (actors.Keys.Contains(name)) { targetImage.Image = actors[name].jobList.Count == 1 ? actors[name].GetJobImage() : actors[name].GetRoleImage(); } } }
private void InitializeData() { this.logCount = 0; int memoryLogCount = logmemoryInfo.GetLogCount(); FF14LogParser logParser = new FF14LogParser(); if (memoryLogCount > 1000) { SetStatus("ログ読込中..."); FFXIVUserFolder userfolder = new FFXIVUserFolder(); CharacterFolder playnow = null; foreach (CharacterFolder cf in userfolder.GetCharacterFolders()) { if (playnow == null) { playnow = cf; } if (cf.LastPlayTimeFromLogFile > playnow.LastPlayTimeFromLogFile) { playnow = cf; } } List <FFXIVLog> LogsFromFile = new List <FFXIVLog>(); memoryLogCount = logmemoryInfo.GetLogCount(); if (playnow.LastPlayTimeFromLogFile > FFXIVLog.StartDateTime) { foreach (FFXIVLog log in FFXIVLogFileReader.GetLogsFromFile(playnow.GeLastWriteLogFile())) { logParser.Add(log); } } SetStatus("ログ読込中..."); foreach (byte[] data in logmemoryInfo.GetNewLogsData()) { logParser.Add(FFXIVLog.ParseSingleLog(data)); } SetStatus("読込完了"); } SetProgress(100, true); this.logParser = logParser; SetProgress(0, false); }
private void Mark(FFXIVLog log) { if (log.LogBodyReplaceTabCode.Contains("設定しました")) { var regex = new Regex(@".*?が(?<name>[A-Z][a-z']+? [A-Z][a-z']+?)に『(?<marker>.+?)』を設定しました。"); var match = regex.Match(log.LogBodyReplaceTabCode); if (match.Success) { string name = match.Groups["name"].Value; string marker = match.Groups["marker"].Value; if (!FF14LogParser.IsPet(name)) { var actorsStatusChanged = new Dictionary <string, PvPActor>(); foreach (string key in actors.Keys) { var pvpActor = FindOrCreatePvPActor(key); if (!pvpActor.isPTMember) { if (key == name) { pvpActor.marker = PvPActor.GetMarkerEnum(marker); actorsStatusChanged[name] = pvpActor; } else if (pvpActor.marker.ToString() == marker) { pvpActor.marker = Marker.なし; actorsStatusChanged[name] = pvpActor; } } } foreach (string key in actorsStatusChanged.Keys) { actors[key] = actorsStatusChanged[key]; } } } } }