public bool Save(bool sign, ReplayInfo flag) { if (File.Exists(FileName)) { File.Delete(FileName); } ReplayStream = File.Create(FileName); if (sign && (flag & ReplayInfo.Signed) != ReplayInfo.Signed) { flag |= ReplayInfo.Signed; } Writer = new ReplayWriter(ReplayStream, flag); if (SaveReplay(sign)) { // Writer.Compress(ReplayStream, FileName); ReplayStream.Close(); Writer.Dispose(); //File.Delete(FileName); //File.Move(FileName + ".gz", FileName); if (Directory.Exists(CacheDirectory)) { DeleteDirectory(CacheDirectory); } return(true); } ReplayStream.Close(); Writer.Dispose(); File.Delete(FileName); return(false); }
private void UpdateReplaysList() { replays = Directory.GetFiles(@"" + (string)Settings.Default["PlaybackDir"], "*.rec"); ListBox.ObjectCollection listReps = listReplays.Items; listReps.Clear(); foreach (string rep in replays) { ReplayStream replay = new ReplayStream(rep); if (replay.readUInt32() != 0) { listReps.Add(Path.GetFileNameWithoutExtension(rep)); } replay.close(); } }
private IEnumerator BackToMainMenuCoroutine() { GameEnded = true; yield return(new WaitForEndOfFrame()); yield return(new WaitForEndOfFrame()); if (ReplayStream != null) { ReplayStream.Close(); } Helper.ReplayBytes = new byte[0]; yield return(SceneManager.LoadSceneAsync("MainMenu").WaitUntilComplete()); }
public bool SaveReplay(bool sign) { if (sign) { //// Sign // Write Header if (Signer != null) { Header.Signature = new RawEntry16(new byte[256]); Header.Certificate = new RawEntry16(Signer.MixedCert.GetRawCertData()); } long hpos = ReplayStream.Position; Writer.Write(Header); // Write Sections WriteSections(); //Signature if (Signer != null) { SignStream(); ReplayStream.Seek(hpos, SeekOrigin.Begin); Writer.Write(Header); } return(true); } else { // Write Header Writer.Write(Header); // Write Sections WriteSections(); return(true); } }
public ReplayStream GetReplayStream() { if (!dataIndex.ContainsKey("stream")) { System.Diagnostics.Debug.WriteLine("Unable to find data stream in replay file: " + path); return(null); } var replayStream = new ReplayStream(); replayStream.version = replayVersion; var offset = dataStart + dataIndex["stream"].offset; var fileStream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read); fileStream.Seek(offset, SeekOrigin.Begin); var binaryReader = new BinaryReader(fileStream); try { var buffer = Compression.Decompress(binaryReader.ReadBytes((int)fileStream.Length)); if (buffer.Length == 0) { throw new Exception(); } var memoryStream = new MemoryStream(buffer); replayStream.reader = new BinaryReader(memoryStream); replayStream.length = memoryStream.Length; fileStream.Close(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Decompression Error: " + ex.ToString()); fileStream.Seek(offset, SeekOrigin.Begin); replayStream.reader = binaryReader; replayStream.length = dataIndex["stream"].size; } return(replayStream); }
public bool Load(ReplayStream reader) { if (reader == null) { return(false); } replayFile = reader.reader; ReadLength = reader.length + replayFile.BaseStream.Position; try { while (replayFile.BaseStream.Position < ReadLength) { var file = replayFile; var packet = new Packet(file); lock (PacketBuffer) PacketBuffer.Add(packet); } } catch { } return(true); }
public bool ReadReplay(ReadMode mode) { ReplayStream = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.Read); // byte flag = (byte)ReplayStream.ReadByte(); Reader = new ReplayReader(ReplayStream); try { // Read File if (mode == ReadMode.HeaderOnly) { Header = Reader.ReadHeader(); ReplayStream.Flush(); Reader.Close(); } else if (mode == ReadMode.All) { // Header Header = Reader.ReadHeader(); // Sections List <ReplaySection> secs = new List <ReplaySection>(); while (!Reader.EOF()) { ReplaySection se = Reader.ReadSection(); secs.Add(se); } // ReplayStream.Flush(); Reader.Close(); ParseSections(secs); } else if (mode == ReadMode.AllExceptData) { // Header Header = Reader.ReadHeader(); // Sections List <ReplaySection> secs = new List <ReplaySection>(); while (!Reader.EOF()) { ReplaySection se = Reader.ReadSection(); if (se.Type != SectionType.Keys && se.Type != SectionType.Chunks) { secs.Add(se); } } // ReplayStream.Flush(); Reader.Close(); ParseSections(secs); } else if (mode == ReadMode.DataOnly) { // Header Header = Reader.ReadHeader(); // Sections List <ReplaySection> secs = new List <ReplaySection>(); while (!Reader.EOF()) { ReplaySection se = Reader.ReadSection(); if (se.Type == SectionType.Keys || se.Type == SectionType.Chunks) { secs.Add(se); } } // ReplayStream.Flush(); Reader.Close(); ParseSections(secs); } return(true); } catch { } finally { } return(false); }
public PacketReader(ReplayStream reader) { loaded = Load(reader); }