/// <summary>
        /// 序列化本地版本资源列表(版本 1)回调函数。
        /// </summary>
        /// <param name="stream">目标流。</param>
        /// <param name="versionList">要序列化的本地版本资源列表(版本 1)。</param>
        /// <returns>是否序列化本地版本资源列表(版本 1)成功。</returns>
        public static bool LocalVersionListSerializeCallback_V1(Stream stream, LocalVersionList versionList)
        {
            if (!versionList.IsValid)
            {
                return(false);
            }

            Utility.Random.GetRandomBytes(s_CachedHashBytes);
            using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.UTF8))
            {
                binaryWriter.Write(s_CachedHashBytes);
                LocalVersionList.Resource[] resources = versionList.GetResources();
                binaryWriter.Write7BitEncodedInt32(resources.Length);
                foreach (LocalVersionList.Resource resource in resources)
                {
                    binaryWriter.WriteEncryptedString(resource.Name, s_CachedHashBytes);
                    binaryWriter.WriteEncryptedString(resource.Variant, s_CachedHashBytes);
                    binaryWriter.WriteEncryptedString(resource.Extension != DefaultExtension ? resource.Extension : null, s_CachedHashBytes);
                    binaryWriter.Write(resource.LoadType);
                    binaryWriter.Write7BitEncodedInt32(resource.Length);
                    binaryWriter.Write(resource.HashCode);
                }
            }

            Array.Clear(s_CachedHashBytes, 0, CachedHashBytesLength);
            return(true);
        }
Ejemplo n.º 2
0
        // 加载本地所有版本
        public static void LoadAllVersionInfo()
        {
            LocalVersionList.Clear();

            // 首包
            OriginalVersionInfo = new VersionInfo(OriginalVersionId, true);
            LocalVersionList.Add(OriginalVersionId.Id3rd, OriginalVersionInfo);

            // 获取本地的所有版本
            DirectoryInfo dirInfo = new DirectoryInfo(LocalStorgePath);

            foreach (DirectoryInfo info in dirInfo.GetDirectories())
            {
                int id3rd = 0;
                if (!int.TryParse(info.Name, out id3rd))
                {
                    continue;
                }
                if (id3rd <= OriginalVersionId.Id3rd)
                {
                    continue;
                }
                VersionNum versionId = new VersionNum(OriginalVersionId.Id1st, OriginalVersionId.Id2nd, id3rd);
                if (!LoadVersionInfo(versionId))
                {
                    continue;
                }
                if (null == CurVersionId || versionId.Id3rd > CurVersionId.Id3rd)
                {
                    CurVersionId = LocalVersionList[versionId.Id3rd].VersionId;
                }
            }
        }
Ejemplo n.º 3
0
        // 加载指定版本信息
        public static bool LoadVersionInfo(VersionNum version)
        {
            VersionInfo versionInfo = null;

            LocalVersionList.TryGetValue(version.Id3rd, out versionInfo);

            if (null == versionInfo)
            {
                versionInfo = new VersionInfo(version);
                if (versionInfo.IsValid)
                {
                    LocalVersionList.Add(version.Id3rd, versionInfo);
                    return(true);
                }
            }
            else if (versionInfo.IsValid)
            {
                return(true);
            }
            else
            {
                LocalVersionList.Remove(version.Id3rd);
                return(false);
            }
            return(false);
        }
        /// <summary>
        /// 序列化本地版本资源列表(版本 0)回调函数。
        /// </summary>
        /// <param name="binaryWriter">目标流。</param>
        /// <param name="versionList">要序列化的本地版本资源列表(版本 0)。</param>
        /// <returns>是否序列化本地版本资源列表(版本 0)成功。</returns>
        public static bool LocalVersionListSerializeCallback_V0(BinaryWriter binaryWriter, LocalVersionList versionList)
        {
            if (!versionList.IsValid)
            {
                return(false);
            }

            Utility.Random.GetRandomBytes(s_CachedHashBytes);
            binaryWriter.Write(s_CachedHashBytes);
            LocalVersionList.Resource[] resources = versionList.GetResources();
            binaryWriter.Write(resources.Length);
            foreach (LocalVersionList.Resource resource in resources)
            {
                binaryWriter.WriteEncryptedString(resource.Name, s_CachedHashBytes);
                binaryWriter.WriteEncryptedString(resource.Variant, s_CachedHashBytes);
                binaryWriter.Write(resource.LoadType);
                binaryWriter.Write(resource.Length);
                binaryWriter.Write(resource.HashCode);
            }

            Array.Clear(s_CachedHashBytes, 0, CachedHashBytesLength);
            return(true);
        }
        /// <summary>
        /// 序列化本地版本资源列表(版本 2)回调函数。
        /// </summary>
        /// <param name="binaryWriter">目标流。</param>
        /// <param name="versionList">要序列化的本地版本资源列表(版本 2)。</param>
        /// <returns>是否序列化本地版本资源列表(版本 2)成功。</returns>
        public static bool LocalVersionListSerializeCallback_V2(BinaryWriter binaryWriter, LocalVersionList versionList)
        {
            if (!versionList.IsValid)
            {
                return(false);
            }

            Utility.Random.GetRandomBytes(s_CachedHashBytes);
            binaryWriter.Write(s_CachedHashBytes);
            LocalVersionList.Resource[] resources = versionList.GetResources();
            binaryWriter.Write7BitEncodedInt32(resources.Length);
            foreach (LocalVersionList.Resource resource in resources)
            {
                binaryWriter.WriteEncryptedString(resource.Name, s_CachedHashBytes);
                binaryWriter.WriteEncryptedString(resource.Variant, s_CachedHashBytes);
                binaryWriter.WriteEncryptedString(resource.Extension != DefaultExtension ? resource.Extension : null, s_CachedHashBytes);
                binaryWriter.Write(resource.LoadType);
                binaryWriter.Write7BitEncodedInt32(resource.Length);
                binaryWriter.Write(resource.HashCode);
            }

            LocalVersionList.FileSystem[] fileSystems = versionList.GetFileSystems();
            binaryWriter.Write7BitEncodedInt32(fileSystems.Length);
            foreach (LocalVersionList.FileSystem fileSystem in fileSystems)
            {
                binaryWriter.WriteEncryptedString(fileSystem.Name, s_CachedHashBytes);
                int[] resourceIndexes = fileSystem.GetResourceIndexes();
                binaryWriter.Write7BitEncodedInt32(resourceIndexes.Length);
                foreach (int resourceIndex in resourceIndexes)
                {
                    binaryWriter.Write7BitEncodedInt32(resourceIndex);
                }
            }

            Array.Clear(s_CachedHashBytes, 0, CachedHashBytesLength);
            return(true);
        }