Beispiel #1
0
        public virtual async Task <byte[]> ExportAsync(SourceDemo demo)
        {
            var buf = new SourceBufferWriter();
            await demo.WriteHeader(buf).ConfigureAwait(false);

            await demo.WriteMessagesAsync(buf).ConfigureAwait(false);

            return(buf.Data);
        }
Beispiel #2
0
        public virtual async Task <SourceDemo> ParseAsync(byte[] content)
        {
            var demo = new SourceDemo();
            var buf  = new SourceBufferReader(content);

            if (Options.ReadHeader)
            {
                await demo.ReadHeader(buf).ConfigureAwait(false);
            }

            if (Options.ReadMessages)
            {
                await Task.Run <SourceGame>(() => demo.Game = GameBuilder.Invoke(demo)).ConfigureAwait(false);

                if (!Options.ReadHeader)
                {
                    buf.SeekBytes(1072);
                }

                await demo.ReadMessagesAsync(buf).ConfigureAwait(false);

                foreach (var message in demo.Messages)
                {
                    if (Options.ReadPackets && message is Packet pa)
                    {
                        await demo.Read(pa).ConfigureAwait(false);

                        continue;
                    }
                    if (Options.ReadStringTables && message is StringTables st)
                    {
                        await demo.Read(st).ConfigureAwait(false);

                        continue;
                    }
                    if (Options.ReadDataTables && message is DataTables dt)
                    {
                        await demo.Read(dt).ConfigureAwait(false);

                        continue;
                    }
                    if (Options.ReadUserCmds && message is UserCmd uc)
                    {
                        await demo.Read(uc).ConfigureAwait(false);

                        continue;
                    }
                }
            }

            return(demo);
        }
Beispiel #3
0
 public virtual async Task ExportToFileAsync(string filePath, SourceDemo demo)
 {
     File.WriteAllBytes(filePath, await ExportAsync(demo).ConfigureAwait(false));
 }