Exemple #1
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);
            }
        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();
        }