123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- //------------------------------------------------------------
- // Game Framework
- // Copyright © 2013-2021 loyalsoft. All rights reserved.
- // Homepage: http://www.game7000.com/
- // Feedback: http://www.game7000.com/
- //------------------------------------------------------------
- using GameFramework;
- using GameFramework.Resource;
- using System;
- using System.IO;
- using System.Text;
- namespace UnityGameFramework.Runtime
- {
- /// <summary>
- /// 内置版本资源列表序列化器。
- /// </summary>
- public static partial class BuiltinVersionListSerializer
- {
- #if UNITY_EDITOR
- /// <summary>
- /// 序列化单机模式版本资源列表(版本 0)回调函数。
- /// </summary>
- /// <param name="stream">目标流。</param>
- /// <param name="versionList">要序列化的单机模式版本资源列表(版本 0)。</param>
- /// <returns>是否序列化单机模式版本资源列表(版本 0)成功。</returns>
- public static bool PackageVersionListSerializeCallback_V0(Stream stream, PackageVersionList versionList)
- {
- if (!versionList.IsValid)
- {
- return false;
- }
- Utility.Random.GetRandomBytes(s_CachedHashBytes);
- using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.UTF8))
- {
- binaryWriter.Write(s_CachedHashBytes);
- binaryWriter.WriteEncryptedString(versionList.ApplicableGameVersion, s_CachedHashBytes);
- binaryWriter.Write(versionList.InternalResourceVersion);
- PackageVersionList.Asset[] assets = versionList.GetAssets();
- binaryWriter.Write(assets.Length);
- PackageVersionList.Resource[] resources = versionList.GetResources();
- binaryWriter.Write(resources.Length);
- foreach (PackageVersionList.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);
- int[] assetIndexes = resource.GetAssetIndexes();
- binaryWriter.Write(assetIndexes.Length);
- byte[] hashBytes = new byte[CachedHashBytesLength];
- foreach (int assetIndex in assetIndexes)
- {
- Utility.Converter.GetBytes(resource.HashCode, hashBytes);
- PackageVersionList.Asset asset = assets[assetIndex];
- binaryWriter.WriteEncryptedString(asset.Name, hashBytes);
- int[] dependencyAssetIndexes = asset.GetDependencyAssetIndexes();
- binaryWriter.Write(dependencyAssetIndexes.Length);
- foreach (int dependencyAssetIndex in dependencyAssetIndexes)
- {
- binaryWriter.WriteEncryptedString(assets[dependencyAssetIndex].Name, hashBytes);
- }
- }
- }
- PackageVersionList.ResourceGroup[] resourceGroups = versionList.GetResourceGroups();
- binaryWriter.Write(resourceGroups.Length);
- foreach (PackageVersionList.ResourceGroup resourceGroup in resourceGroups)
- {
- binaryWriter.WriteEncryptedString(resourceGroup.Name, s_CachedHashBytes);
- int[] resourceIndexes = resourceGroup.GetResourceIndexes();
- binaryWriter.Write(resourceIndexes.Length);
- foreach (ushort resourceIndex in resourceIndexes)
- {
- binaryWriter.Write(resourceIndex);
- }
- }
- }
- Array.Clear(s_CachedHashBytes, 0, CachedHashBytesLength);
- return true;
- }
- /// <summary>
- /// 序列化单机模式版本资源列表(版本 1)回调函数。
- /// </summary>
- /// <param name="stream">目标流。</param>
- /// <param name="versionList">要序列化的单机模式版本资源列表(版本 1)。</param>
- /// <returns>是否序列化单机模式版本资源列表(版本 1)成功。</returns>
- public static bool PackageVersionListSerializeCallback_V1(Stream stream, PackageVersionList versionList)
- {
- if (!versionList.IsValid)
- {
- return false;
- }
- Utility.Random.GetRandomBytes(s_CachedHashBytes);
- using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.UTF8))
- {
- binaryWriter.Write(s_CachedHashBytes);
- binaryWriter.WriteEncryptedString(versionList.ApplicableGameVersion, s_CachedHashBytes);
- binaryWriter.Write7BitEncodedInt32(versionList.InternalResourceVersion);
- PackageVersionList.Asset[] assets = versionList.GetAssets();
- binaryWriter.Write7BitEncodedInt32(assets.Length);
- foreach (PackageVersionList.Asset asset in assets)
- {
- binaryWriter.WriteEncryptedString(asset.Name, s_CachedHashBytes);
- int[] dependencyAssetIndexes = asset.GetDependencyAssetIndexes();
- binaryWriter.Write7BitEncodedInt32(dependencyAssetIndexes.Length);
- foreach (int dependencyAssetIndex in dependencyAssetIndexes)
- {
- binaryWriter.Write7BitEncodedInt32(dependencyAssetIndex);
- }
- }
- PackageVersionList.Resource[] resources = versionList.GetResources();
- binaryWriter.Write7BitEncodedInt32(resources.Length);
- foreach (PackageVersionList.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);
- int[] assetIndexes = resource.GetAssetIndexes();
- binaryWriter.Write7BitEncodedInt32(assetIndexes.Length);
- foreach (int assetIndex in assetIndexes)
- {
- binaryWriter.Write7BitEncodedInt32(assetIndex);
- }
- }
- PackageVersionList.ResourceGroup[] resourceGroups = versionList.GetResourceGroups();
- binaryWriter.Write7BitEncodedInt32(resourceGroups.Length);
- foreach (PackageVersionList.ResourceGroup resourceGroup in resourceGroups)
- {
- binaryWriter.WriteEncryptedString(resourceGroup.Name, s_CachedHashBytes);
- int[] resourceIndexes = resourceGroup.GetResourceIndexes();
- binaryWriter.Write7BitEncodedInt32(resourceIndexes.Length);
- foreach (int resourceIndex in resourceIndexes)
- {
- binaryWriter.Write7BitEncodedInt32(resourceIndex);
- }
- }
- }
- Array.Clear(s_CachedHashBytes, 0, CachedHashBytesLength);
- return true;
- }
- /// <summary>
- /// 序列化单机模式版本资源列表(版本 2)回调函数。
- /// </summary>
- /// <param name="stream">目标流。</param>
- /// <param name="versionList">要序列化的单机模式版本资源列表(版本 2)。</param>
- /// <returns>是否序列化单机模式版本资源列表(版本 2)成功。</returns>
- public static bool PackageVersionListSerializeCallback_V2(Stream stream, PackageVersionList versionList)
- {
- if (!versionList.IsValid)
- {
- return false;
- }
- Utility.Random.GetRandomBytes(s_CachedHashBytes);
- using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.UTF8))
- {
- binaryWriter.Write(s_CachedHashBytes);
- binaryWriter.WriteEncryptedString(versionList.ApplicableGameVersion, s_CachedHashBytes);
- binaryWriter.Write7BitEncodedInt32(versionList.InternalResourceVersion);
- PackageVersionList.Asset[] assets = versionList.GetAssets();
- binaryWriter.Write7BitEncodedInt32(assets.Length);
- foreach (PackageVersionList.Asset asset in assets)
- {
- binaryWriter.WriteEncryptedString(asset.Name, s_CachedHashBytes);
- int[] dependencyAssetIndexes = asset.GetDependencyAssetIndexes();
- binaryWriter.Write7BitEncodedInt32(dependencyAssetIndexes.Length);
- foreach (int dependencyAssetIndex in dependencyAssetIndexes)
- {
- binaryWriter.Write7BitEncodedInt32(dependencyAssetIndex);
- }
- }
- PackageVersionList.Resource[] resources = versionList.GetResources();
- binaryWriter.Write7BitEncodedInt32(resources.Length);
- foreach (PackageVersionList.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);
- int[] assetIndexes = resource.GetAssetIndexes();
- binaryWriter.Write7BitEncodedInt32(assetIndexes.Length);
- foreach (int assetIndex in assetIndexes)
- {
- binaryWriter.Write7BitEncodedInt32(assetIndex);
- }
- }
- PackageVersionList.FileSystem[] fileSystems = versionList.GetFileSystems();
- binaryWriter.Write7BitEncodedInt32(fileSystems.Length);
- foreach (PackageVersionList.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);
- }
- }
- PackageVersionList.ResourceGroup[] resourceGroups = versionList.GetResourceGroups();
- binaryWriter.Write7BitEncodedInt32(resourceGroups.Length);
- foreach (PackageVersionList.ResourceGroup resourceGroup in resourceGroups)
- {
- binaryWriter.WriteEncryptedString(resourceGroup.Name, s_CachedHashBytes);
- int[] resourceIndexes = resourceGroup.GetResourceIndexes();
- binaryWriter.Write7BitEncodedInt32(resourceIndexes.Length);
- foreach (int resourceIndex in resourceIndexes)
- {
- binaryWriter.Write7BitEncodedInt32(resourceIndex);
- }
- }
- }
- Array.Clear(s_CachedHashBytes, 0, CachedHashBytesLength);
- return true;
- }
- #endif
- }
- }
|