protected override void LoadExtraHeader(BinaryReader reader) { loadedTagCount = reader.ReadByte(); loadedDataOffset = reader.ReadUInt16(); loadedIdentifierLength = reader.ReadByte(); Timestamp = DateTime.FromBinary(reader.ReadInt64()); Duration = TimeSpan.FromTicks(reader.ReadInt64()); loadedParts = 0; }
protected override void LoadData(BinaryReader reader) { if (!loadedParts.HasFlag(LoadedParts.Identifier)) { loadedParts |= LoadedParts.Identifier; byte[] identData = reader.ReadBytes(loadedIdentifierLength); Identifier = Encoding.UTF8.GetString(identData); } else if (!loadedParts.HasFlag(LoadedParts.Tags)) { loadedParts |= LoadedParts.Tags; reader.BaseStream.Seek(loadedIdentifierLength, SeekOrigin.Current); for (int i = 0; i < loadedTagCount; i++) { DateTime stamp = DateTime.FromBinary(reader.ReadInt64()); byte nameLength = reader.ReadByte(); UInt16 dataLength = reader.ReadUInt16(); byte[] nameData = reader.ReadBytes(nameLength); byte[] tagData = reader.ReadBytes(dataLength); Tags.Add(new Tag() { Name = Encoding.UTF8.GetString(nameData), Data = tagData, Timestamp = stamp, }); } } else if (!loadedParts.HasFlag(LoadedParts.Frame)) { loadedParts |= LoadedParts.Frame; reader.BaseStream.Seek(loadedDataOffset, SeekOrigin.Current); UInt32 remains = (UInt32)(DataSize - loadedDataOffset); List <byte[]> chunks = new List <byte[]>(); while (remains != 0) { UInt32 chunkSize = reader.ReadUInt32(); chunks.Add(reader.ReadBytes((Int32)chunkSize)); remains -= 4 + chunkSize; } FrameData = chunks.ToArray(); } }
public RecordHeader() { loadedParts = LoadedParts.Frame | LoadedParts.Identifier | LoadedParts.Tags; }