Esempio n. 1
0
        public void LoadAndCleanSwap(ESave eSave)
        {
            mSwapSpace.Init();
            //mSwapSpace.Init(Path.Combine(GetArchiveRootDir(), "swap"));

            string dir = Load(eSave);

            if (!string.IsNullOrEmpty(dir))
            {
                Archive.Header header = mCurArchive.GetHeader();
                mSwapSpace.CopyFrom(dir, (fileInfo) =>
                {
                    try{
                        using (FileStream fs = fileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.Read))
                        {
                            using (BinaryReader r = new BinaryReader(fs))
                            {
                                Archive.Header other = new Archive.Header();
                                if (other.Read(r))
                                {
                                    if (header.IsMatch(other))
                                    {
                                        return(true);
                                    }
                                }
                            }
                        }
                    }catch (System.Exception e) {
                        Debug.LogWarning("[LoadAndCleanSwap]" + e);
                    }
                    return(false);
                });
            }
        }
Esempio n. 2
0
            static bool Write(Archive.Header header, string path, Dictionary <string, ArchiveIndex> dic)
            {
                try
                {
                    using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                    {
                        using (BinaryWriter bw = new BinaryWriter(fs))
                        {
                            header.Write(bw);
                            header.BeginWriteCheckSum(bw);

                            bw.Write((int)dic.Count);

                            foreach (KeyValuePair <string, ArchiveIndex> kvp in dic)
                            {
                                bw.Write(kvp.Key);

                                kvp.Value.Write(bw);
                            }

                            header.EndWriteCheckSum(bw);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.LogWarning(ex);
                    return(false);
                }

                return(true);
            }
Esempio n. 3
0
        void SaveArchive(ESave eSave)
        {
            eventor.Dispatch(new ArchiveEvent()
            {
                eSave = eSave
            });

            string dir = CreateCurArchive(eSave);

            Archive.Header header = GetHeader(eSave);

            if (header == null)
            {
                header = new Archive.Header();
                header.NewGuid();

                SetHeader(eSave, header);

                if (!mSwapSpace.CopyTo(dir, (fileInfo) => {
                    using (FileStream fs = fileInfo.Open(FileMode.Open, FileAccess.Write)){
                        using (BinaryWriter w = new BinaryWriter(fs)){
                            header.Write(w);
                        }
                    }
                }))
                {
                    Debug.LogError("[Save]:Failed to save game at " + eSave);
                    return;                     // Failed to save
                }
            }

            Profiler.BeginSample("write archive:" + eSave);

            mCurArchive.WriteToFile(mArchiveObjList, yirdName, header, (recordObj) =>
            {
                if (eSave >= ESave.MinAuto && eSave < ESave.MaxAuto)
                {
                    bool saveFlag = recordObj.GetSaveFlag(eSave);

                    recordObj.ResetSaveFlag(eSave);

                    return(saveFlag);
                }
                else
                {
                    return(true);
                }
            });

            Profiler.EndSample();

            //Profiler.BeginSample("sync swap :");

            //mSwapSpace.Sync(mCurArchive.dir);

            //Profiler.EndSample();
        }
Esempio n. 4
0
        public bool WriteToFile(ArchiveObj.List serializeObjList, string yirdName, Archive.Header header, SaveRecordObj saveRecordObj)
        {
            try
            {
                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }

                mIndexFile          = new ArchiveIndexFile();
                mIndexFile.yirdName = yirdName;
                mIndexFile.header   = header;

                bool             bOldIdxFileLoaded = false;
                ArchiveIndexFile oldIndexFile      = null;
                Profiler.BeginSample("Archive");
                serializeObjList.Foreach((serializeObj) =>
                {
                    bool bWrite = true;
                    if (saveRecordObj != null)
                    {
                        bWrite = saveRecordObj(serializeObj);
                    }

                    if (bWrite)
                    {
                        WriteRecord(mIndexFile, serializeObj);
                    }
                    else
                    {
                        if (!bOldIdxFileLoaded)
                        {
                            oldIndexFile      = ArchiveIndexFile.LoadFromFile(dir, yirdName);
                            bOldIdxFileLoaded = true;
                        }
                        CopyIndex(mIndexFile, oldIndexFile, serializeObj);
                    }
                });
                Profiler.EndSample();

                mIndexFile.Write(dir);
            }
            catch (Exception ex)
            {
                Debug.LogWarning(ex);
                return(false);
            }

            return(true);
        }
Esempio n. 5
0
            public bool LoadYird(string dir, string yirdName)
            {
                if (string.IsNullOrEmpty(yirdName))
                {
                    return(false);
                }

                mYirdName = yirdName;

                string path = GetIndexFilePath(GetYirdDir(dir));

                Archive.Header yirdHeader = Load(path, mYirdDicIndex, header);
                if (yirdHeader == null)
                {
                    return(false);
                }

                return(true);
            }
Esempio n. 6
0
        public bool Open()
        {
            try
            {
                string filePath = Archive.GetFilePath(mPath, mIndex.fileName);

                if (!File.Exists(filePath))
                {
                    Debug.LogError("file not exist:" + filePath);
                    return(false);
                }


                mFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                mReader     = new BinaryReader(mFileStream);

                Archive.Header header = new Archive.Header();

                if (!header.Read(mReader) || !header.IsMatch(mHeader))
                {
                    mReader.Close();
                    mReader = null;

                    mFileStream.Close();
                    mFileStream = null;

                    return(false);
                }

                mFileStream.Seek(mIndex.beginPos, SeekOrigin.Begin);

                return(true);
            }
            catch (Exception ex)
            {
                Debug.LogWarning(ex);
                return(false);
            }
        }
Esempio n. 7
0
        public int GetCurArvhiveVersion()
        {
            Archive.Header header = mCurArchive.GetHeader();

            return(header.version);
        }
Esempio n. 8
0
 void SetHeader(ESave eSave, Archive.Header header)
 {
     mArchiveHeaders[eSave - ESave.Min] = header;
 }
Esempio n. 9
0
 public PeRecordReader(ArchiveIndex index, string path, Archive.Header header)
 {
     mPath   = path;
     mIndex  = index;
     mHeader = header;
 }