示例#1
0
        /// <summary>
        /// Reads in a Plasma Registry Page
        /// </summary>
        /// <param name="filename">Path to the Plasma Registry Page</param>
        /// <param name="readObjects">Whether or not we should read in the KeyedObjects</param>
        /// <param name="progress">Whether or not this should dispatch a plOperationProgress event</param>
        /// <returns>PageInfo representing this Plasma Registry Page</returns>
        public plPageInfo ReadPage(string filename, bool readObjects = false, bool progress = true)
        {
            plDebugLog.GetLog("ResManager").Debug("Reading PRP: " + Path.GetFileName(filename));
            hsStream s = new hsStream(filename);

            plPageInfo info = new plPageInfo();
            info.Read(s);
            fPages.Add(info);

            plDebugLog.GetLog("ResManager").Debug("\t* Plasma Version: " + s.Version.ToString());
            plDebugLog.GetLog("ResManager").Debug("\t* Location: " + info.Location.ToString());
            //if (fVersion == null)
                fVersion = s.Version;

            s.Seek(info.IndexStart);
            List<HoldingKey> keys = IReadKeyring(s, info.Location);

            if (!readObjects) {
                //Add them to the held list and go away!
                //Note: Don't close the stream! It will be
                //      used later to read the objects!
                fHeldKeys.AddRange(keys);
            } else {
                if (OnProgressStart != null && progress)
                    OnProgressStart(plOperationType.ReadingPageObjects, info.GetFilename(s.Version));

                for (int i = 0; i < keys.Count; i++) {
                    IReadHoldingKey(keys[i]);
                    if (OnProgress != null)
                        OnProgress(keys.Count, i + 1);
                }
            }

            return info;
        }