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); }); } }
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(); }
string CreateCurArchive(ESave eSave) { string dir = GetArchiveDir(eSave); mCurSave = eSave; mCurArchive = new Archive(dir); return(dir); }
public void Delete(ESave eSave) { if (eSave == mCurSave) { RemoveCurArchive(); } try{ Directory.Delete(GetArchiveDir(eSave), true); }catch {} }
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)); }
public string Load(ESave eSave) { string dir = null; if (eSave != ESave.New) { dir = CreateCurArchive(eSave); if (!mCurArchive.LoadFromFile()) { dir = null; } } return(dir); }
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; }
void RemoveCurArchive() { mCurSave = ESave.Max; mCurArchive = null; }
void SetHeader(ESave eSave, Archive.Header header) { mArchiveHeaders[eSave - ESave.Min] = header; }
//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]); }