Beispiel #1
0
        public virtual async ValueTask <bool> ParseReplayHeader(CustomBinaryReaderAsync 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);
        }
Beispiel #2
0
        public virtual async ValueTask <bool> ParseEventHeader(CustomBinaryReaderAsync 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();

            return(await ChooseEventChunkType(binaryReader, new EventOrCheckpointInfo( id, group, metadata, time1, time2 )));
        }
Beispiel #3
0
        /// <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(CustomBinaryReaderAsync 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()));
Beispiel #4
0
        public virtual async ValueTask <bool> ParseCheckpointHeader(CustomBinaryReaderAsync 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 MemoryReader(uncompressed.Memory, Endianness.Native), id, group, metadata, time1, time2));
            }
        }