Ejemplo n.º 1
0
            public static ArchiveIndexFile LoadFromFile(string dir, string yirdName = null)
            {
                ArchiveIndexFile archiveIndexFile = new ArchiveIndexFile();

                if (!archiveIndexFile.Load(dir))
                {
                    return(null);
                }

                archiveIndexFile.LoadYird(dir, yirdName);

                return(archiveIndexFile);
            }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        public bool LoadFromFile()
        {
            try
            {
                if (!Directory.Exists(dir))
                {
                    return(false);
                }

                mIndexFile = ArchiveIndexFile.LoadFromFile(dir);
                return(mIndexFile != null);
            }
            catch (Exception ex)
            {
                Debug.LogWarning(ex);
                return(false);
            }
        }
Ejemplo n.º 4
0
        static void CopyIndex(ArchiveIndexFile indexFile, ArchiveIndexFile oldIndexFile, ArchiveObj serializeObj)
        {
            if (oldIndexFile == null)
            {
                return;
            }

            serializeObj.Foreach((obj) =>
            {
                Profiler.BeginSample("only copy index:" + obj.key);

                ArchiveIndex index = oldIndexFile.GetArchiveIndex(obj.key);
                if (index != null)
                {
                    indexFile.Add(obj.key, index);
                }

                Profiler.EndSample();
            });
        }
Ejemplo n.º 5
0
        void WriteRecord(ArchiveIndexFile indexFile, ArchiveObj serializeObj)
        {
            if (serializeObj.hasNonYird)
            {
                string filePath = GetFilePath(dir, serializeObj.recordName);

                using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                {
                    using (BinaryWriter writer = new BinaryWriter(fileStream))
                    {
                        indexFile.header.Write(writer);
                        indexFile.header.BeginWriteCheckSum(writer);

                        serializeObj.Foreach((obj) =>
                        {
                            if (!obj.yird)
                            {
                                Profiler.BeginSample("save:" + obj.key);
                                long beginPos = fileStream.Position;
                                obj.serialize.Serialize(new PeRecordWriter(obj.key, writer));
                                long endPos = fileStream.Position;

                                indexFile.Add(obj.key, new ArchiveIndex(serializeObj.recordName, obj.yird, beginPos, endPos));
                                Profiler.EndSample();
                            }
                        });

                        indexFile.header.EndWriteCheckSum(writer);
                    }
                }
            }

            if (serializeObj.hasYird)
            {
                string yirdDir      = indexFile.GetYirdDir(dir);
                string yirdFilePath = GetFilePath(yirdDir, serializeObj.recordName);

                if (!Directory.Exists(yirdDir))
                {
                    Directory.CreateDirectory(yirdDir);
                }

                using (FileStream yirdFileStream = new FileStream(yirdFilePath, FileMode.Create, FileAccess.Write))
                {
                    using (BinaryWriter yirdWriter = new BinaryWriter(yirdFileStream))
                    {
                        indexFile.header.Write(yirdWriter);
                        indexFile.header.BeginWriteCheckSum(yirdWriter);

                        serializeObj.Foreach((obj) =>
                        {
                            Profiler.BeginSample("save:" + obj.key);

                            if (obj.yird)
                            {
                                long beginPos = yirdFileStream.Position;

                                obj.serialize.Serialize(new PeRecordWriter(obj.key, yirdWriter));

                                long endPos = yirdFileStream.Position;

                                indexFile.Add(obj.key, new ArchiveIndex(serializeObj.recordName, obj.yird, beginPos, endPos));
                            }

                            Profiler.EndSample();
                        });

                        indexFile.header.EndWriteCheckSum(yirdWriter);
                    }
                }
            }
        }