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); }
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); }
public virtual async Task ExportToFileAsync(string filePath, SourceDemo demo) { File.WriteAllBytes(filePath, await ExportAsync(demo).ConfigureAwait(false)); }