开放资源解密外部调用

This commit is contained in:
陈思海 2025-11-18 10:12:32 +08:00
parent f43eb7344e
commit d729d435d2
3 changed files with 62 additions and 53 deletions

View File

@ -29,6 +29,7 @@ namespace AlicizaX.Framework.Runtime.ABase
if (_resourceComponent != null) if (_resourceComponent != null)
{ {
_resourceComponent.SetPlayMode(_dynamicBindInfo.ResMode); _resourceComponent.SetPlayMode(_dynamicBindInfo.ResMode);
_resourceComponent.SetDecryptionServices(_dynamicBindInfo.DecryptionServices);
} }
if (_debuggerComponent != null) if (_debuggerComponent != null)
@ -48,5 +49,6 @@ namespace AlicizaX.Framework.Runtime.ABase
public DebuggerActiveWindowType DebuggerActiveWindowType; public DebuggerActiveWindowType DebuggerActiveWindowType;
public int ResMode; public int ResMode;
public string Language; public string Language;
public string DecryptionServices;
} }
} }

View File

@ -180,6 +180,11 @@ namespace AlicizaX.Resource.Runtime
_playMode = (EPlayMode)playMode; _playMode = (EPlayMode)playMode;
} }
public void SetDecryptionServices(string decryption)
{
decryptionServices = decryption;
}
private void Awake() private void Awake()
{ {
_resourceModule = ModuleSystem.RegisterModule<IResourceModule, ResourceModule>(); _resourceModule = ModuleSystem.RegisterModule<IResourceModule, ResourceModule>();

View File

@ -34,64 +34,64 @@ namespace AlicizaX.Resource.Runtime
/// </summary> /// </summary>
class FileStreamDecryption : IDecryptionServices class FileStreamDecryption : IDecryptionServices
{ {
/// <summary> /// <summary>
/// 同步方式获取解密的资源包对象 /// 同步方式获取解密的资源包对象
/// </summary> /// </summary>
DecryptResult IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo) DecryptResult IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo)
{ {
BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read); BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read);
DecryptResult decryptResult = new DecryptResult(); DecryptResult decryptResult = new DecryptResult();
decryptResult.ManagedStream = bundleStream; decryptResult.ManagedStream = bundleStream;
decryptResult.Result = AssetBundle.LoadFromStream(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize()); decryptResult.Result = AssetBundle.LoadFromStream(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize());
return decryptResult; return decryptResult;
} }
/// <summary> /// <summary>
/// 异步方式获取解密的资源包对象 /// 异步方式获取解密的资源包对象
/// </summary> /// </summary>
DecryptResult IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo) DecryptResult IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo)
{ {
BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read); BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read);
DecryptResult decryptResult = new DecryptResult(); DecryptResult decryptResult = new DecryptResult();
decryptResult.ManagedStream = bundleStream; decryptResult.ManagedStream = bundleStream;
decryptResult.CreateRequest = AssetBundle.LoadFromStreamAsync(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize()); decryptResult.CreateRequest = AssetBundle.LoadFromStreamAsync(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize());
return decryptResult; return decryptResult;
} }
/// <summary> /// <summary>
/// 后备方式获取解密的资源包 /// 后备方式获取解密的资源包
/// 注意:当正常解密方法失败后,会触发后备加载! /// 注意:当正常解密方法失败后,会触发后备加载!
/// 说明建议通过LoadFromMemory()方法加载资源包作为保底机制。 /// 说明建议通过LoadFromMemory()方法加载资源包作为保底机制。
/// </summary> /// </summary>
DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo) DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo)
{ {
byte[] fileData = File.ReadAllBytes(fileInfo.FileLoadPath); byte[] fileData = File.ReadAllBytes(fileInfo.FileLoadPath);
var assetBundle = AssetBundle.LoadFromMemory(fileData); var assetBundle = AssetBundle.LoadFromMemory(fileData);
DecryptResult decryptResult = new DecryptResult(); DecryptResult decryptResult = new DecryptResult();
decryptResult.Result = assetBundle; decryptResult.Result = assetBundle;
return decryptResult; return decryptResult;
} }
/// <summary> /// <summary>
/// 获取解密的字节数据 /// 获取解密的字节数据
/// </summary> /// </summary>
byte[] IDecryptionServices.ReadFileData(DecryptFileInfo fileInfo) byte[] IDecryptionServices.ReadFileData(DecryptFileInfo fileInfo)
{ {
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
/// <summary> /// <summary>
/// 获取解密的文本数据 /// 获取解密的文本数据
/// </summary> /// </summary>
string IDecryptionServices.ReadFileText(DecryptFileInfo fileInfo) string IDecryptionServices.ReadFileText(DecryptFileInfo fileInfo)
{ {
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
private static uint GetManagedReadBufferSize() private static uint GetManagedReadBufferSize()
{ {
return 1024; return 1024;
} }
} }
/// <summary> /// <summary>
@ -161,6 +161,7 @@ namespace AlicizaX.Resource.Runtime
public BundleStream(string path, FileMode mode, FileAccess access, FileShare share) : base(path, mode, access, share) public BundleStream(string path, FileMode mode, FileAccess access, FileShare share) : base(path, mode, access, share)
{ {
} }
public BundleStream(string path, FileMode mode) : base(path, mode) public BundleStream(string path, FileMode mode) : base(path, mode)
{ {
} }
@ -172,6 +173,7 @@ namespace AlicizaX.Resource.Runtime
{ {
array[i] ^= KEY; array[i] ^= KEY;
} }
return index; return index;
} }
} }