Example #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);
                });
            }
        }
Example #2
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();
        }
Example #3
0
        string CreateCurArchive(ESave eSave)
        {
            string dir = GetArchiveDir(eSave);

            mCurSave = eSave;

            mCurArchive = new Archive(dir);

            return(dir);
        }
Example #4
0
 public void Delete(ESave eSave)
 {
     if (eSave == mCurSave)
     {
         RemoveCurArchive();
     }
     try{
         Directory.Delete(GetArchiveDir(eSave), true);
     }catch {}
 }
Example #5
0
        static string GetArchiveDir(ESave eSave)
        {
            string fileName;

            if (eSave < ESave.MaxAuto)
            {
                fileName = AutoSaveFileNamePrefix + (int)eSave;
            }
            else
            {
                fileName = UserSaveFileNamePrefix + ((int)eSave - (int)ESave.MinUser);
            }

            return(GetArchiveDir(fileName));
        }
Example #6
0
        public string Load(ESave eSave)
        {
            string dir = null;

            if (eSave != ESave.New)
            {
                dir = CreateCurArchive(eSave);

                if (!mCurArchive.LoadFromFile())
                {
                    dir = null;
                }
            }

            return(dir);
        }
Example #7
0
        public void Save(ESave eSave)
        {
#if !UNITY_EDITOR
            if (GameLog.IsFatalError)
            {
                return;
            }
#endif

            if (Pathea.PeGameMgr.playerType == Pathea.PeGameMgr.EPlayerType.Tutorial)            //||(Pathea.PeGameMgr.yirdName ==Pathea.AdventureScene.Dungen.ToString()&&Pathea.PeGameMgr.targetYird!=Pathea.AdventureScene.MainAdventure.ToString()))
            {
                return;
            }

            autoSave = eSave < ESave.MaxAuto;
            SaveArchive(eSave);
            autoSave = false;
        }
Example #8
0
 void RemoveCurArchive()
 {
     mCurSave    = ESave.Max;
     mCurArchive = null;
 }
Example #9
0
 void SetHeader(ESave eSave, Archive.Header header)
 {
     mArchiveHeaders[eSave - ESave.Min] = header;
 }
Example #10
0
        //void CleanArchiveDir(string dir)
        //{
        //    try
        //    {
        //        DirectoryInfo dirInfo = new DirectoryInfo(dir);

        //        if (dirInfo.Exists)
        //        {
        //            FileInfo[] fileInfos = dirInfo.GetFiles("*", SearchOption.AllDirectories);

        //            foreach (FileInfo fileInfo in fileInfos)
        //            {
        //                string relativePath = fileInfo.FullName.Remove(0, dirInfo.FullName.Length + 1);

        //                if (!mSwapSpace.Exists(relativePath))
        //                {
        //                    fileInfo.Delete();
        //                }
        //            }
        //        }
        //        else
        //        {
        //            dirInfo.Create();
        //        }

        //        //if (Directory.Exists(dir))
        //        //{
        //        //    Directory.Delete(dir, true);
        //        //}

        //        //Directory.CreateDirectory(dir);
        //    }
        //    catch (System.Exception ex)
        //    {
        //        GameLog.HandleIOException(ex);
        //    }
        //}

        Archive.Header GetHeader(ESave eSave)
        {
            return(mArchiveHeaders[eSave - ESave.Min]);
        }