public virtual async ValueTask <bool> ParseEventHeader(ReplayArchiveAsync ar) { string id = await ar.ReadStringAsync(); string group = await ar.ReadStringAsync(); string metadata = await ar.ReadStringAsync(); uint time1 = await ar.ReadUInt32Async(); uint time2 = await ar.ReadUInt32Async(); int eventSizeInBytes = await ar.ReadInt32Async(); return(await ChooseEventChunkType(ar, new EventOrCheckpointInfo( id, group, metadata, time1, time2 ))); }
/// <summary> /// Simply return true and does nothing else. It depends on the implementation of the game. /// </summary> /// <param name="chunk"></param> /// <returns></returns> public virtual async ValueTask <bool> ParseGameSpecificHeaderChunk(ReplayArchiveAsync binaryReader) { if (await binaryReader.ReadUInt32Async() != DemoHeaderMagic) { return(false); } NetworkVersionHistory version = (NetworkVersionHistory)await binaryReader.ReadUInt32Async(); if (version < NetworkVersionHistory.saveFullEngineVersion) { return(false); } uint networkChecksum = await binaryReader.ReadUInt32Async(); EngineNetworkVersionHistory engineNetworkProtocolVersion = (EngineNetworkVersionHistory)await binaryReader.ReadUInt32Async(); uint gameNetworkProtocolVersion = await binaryReader.ReadUInt32Async(); Guid guid = Guid.Empty; if (version >= NetworkVersionHistory.guidDemoHeader) { guid = new Guid((await binaryReader.ReadBytesAsync(16)).Span); } ushort major = await binaryReader.ReadUInt16Async(); ushort minor = await binaryReader.ReadUInt16Async(); ushort patch = await binaryReader.ReadUInt16Async(); uint changeList = await binaryReader.ReadUInt32Async(); string branch = await binaryReader.ReadStringAsync(); (string, uint)[] levelNamesAndTimes = await binaryReader.ReadArrayAsync(async() => (await binaryReader.ReadStringAsync(), await binaryReader.ReadUInt32Async()));
public virtual async ValueTask <bool> ParseReplayHeader(ReplayArchiveAsync binaryReader) { if (!await ParseMagicNumber(binaryReader)) { return(false); } ReplayHeader.ReplayVersionHistory fileVersion = (ReplayHeader.ReplayVersionHistory) await binaryReader.ReadUInt32Async(); int lengthInMs = await binaryReader.ReadInt32Async(); uint networkVersion = await binaryReader.ReadUInt32Async(); uint changelist = await binaryReader.ReadUInt32Async(); string friendlyName = await binaryReader.ReadStringAsync(); bool isLive = await binaryReader.ReadUInt32Async() != 0; DateTime timestamp = DateTime.MinValue; if (fileVersion >= ReplayHeader.ReplayVersionHistory.recordedTimestamp) { timestamp = DateTime.FromBinary(await binaryReader.ReadInt64Async()); } bool compressed = false; if (fileVersion >= ReplayHeader.ReplayVersionHistory.compression) { compressed = await binaryReader.ReadUInt32Async() != 0; } ReplayHeader = new ReplayHeader(lengthInMs, networkVersion, changelist, friendlyName, timestamp, 0, isLive, compressed, fileVersion); return(true); }
public virtual async ValueTask <bool> ParseCheckpointHeader(ReplayArchiveAsync binaryReader) { string id = await binaryReader.ReadStringAsync(); string group = await binaryReader.ReadStringAsync(); string metadata = await binaryReader.ReadStringAsync(); uint time1 = await binaryReader.ReadUInt32Async(); uint time2 = await binaryReader.ReadUInt32Async(); int eventSizeInBytes = await binaryReader.ReadInt32Async(); Debug.Assert(eventSizeInBytes == binaryReader.Length - binaryReader.Position); using (IMemoryOwner <byte> uncompressed = await binaryReader.UncompressData()) { return(ParseCheckpointContent(new ChunkArchive(uncompressed.Memory, DemoHeader !, ReplayHeader !), id, group, metadata, time1, time2)); } }
public virtual async ValueTask <bool> ParseCheckpointHeader(ReplayArchiveAsync binaryReader) { string id = await binaryReader.ReadStringAsync(); string group = await binaryReader.ReadStringAsync(); string metadata = await binaryReader.ReadStringAsync(); uint time1 = await binaryReader.ReadUInt32Async(); uint time2 = await binaryReader.ReadUInt32Async(); int eventSizeInBytes = await binaryReader.ReadInt32Async(); using (IMemoryOwner <byte> uncompressed = await binaryReader.UncompressData()) { return(ParseCheckpointContent(new ChunkArchive(uncompressed.Memory, DemoHeader !.EngineNetworkProtocolVersion), id, group, metadata, time1, time2)); return(true); } }