public LogGroup(LogFileReader reader, string name) { Name = name; FileReader = reader; var xmlData = reader.ReadArchiveFile(name + "/Structure.xml"); var xmlString = Encoding.ASCII.GetString(xmlData); using (var xmlReader = XmlTextReader.Create(new StringReader(xmlString))) { while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { switch (xmlReader.Name) { case "entity": if (xmlReader.GetAttribute("name") != this.Name) { Debug.WriteLine("Something is not right"); } break; case "field": var fieldObj = new LogField(this, xmlReader.GetAttribute("name"), xmlReader.GetAttribute("id"), xmlReader.GetAttribute("type")); _fields.Add(fieldObj); break; } } } } var timeline = FileReader.ReadArchiveFile(Name + "/Time.bin"); int index = 0; while (index < timeline.Length) { int time = BitConverter.ToInt32(timeline, index); int offset = BitConverter.ToInt32(timeline, index + 4); _timeline.Add(time, offset); index += 8; } }
public LogSampleProvider(LogFileReader reader, IEnumerable <string> groups, int startTime, int endTime) { Reader = reader; _groups = groups.ToList(); StartTime = startTime; EndTime = endTime; // Make base sample. TimeLine = reader.Groups.SelectMany(x => x.Timeline.Keys).Distinct().OrderBy(x => x).ToList(); // If this time doesn't exist; search the closest related. if (!TimeLine.Contains(startTime)) { startTime = TimeLine.Select(x => x - startTime).OrderBy(x => x).Take(1).FirstOrDefault() + startTime; } Sample = new LogSample(this, startTime, groups.Select(reader.GetGroup)); InitializeSample(Sample, startTime); }