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);
        }
Beispiel #2
0
 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);
            }
        }
Beispiel #5
0
        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);
 }