update: CDNLoader 统一接口
							parent
							
								
									076f784b1c
								
							
						
					
					
						commit
						c5a23e19d1
					
				|  | @ -13,6 +13,13 @@ using UnityEditor; | |||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| public enum LoadType | ||||
| { | ||||
|     Text, | ||||
|     Bytes, | ||||
|     Texture2D, | ||||
| } | ||||
| 
 | ||||
| /// <summary> | ||||
| /// CDN云控配置 | ||||
| /// </summary> | ||||
|  | @ -21,6 +28,7 @@ public class CDNConfig | |||
| { | ||||
|     internal static string CdnConfigRemoteKey = "cdn_config"; | ||||
| 
 | ||||
|     public bool enable = true; | ||||
|     public string[] replace; | ||||
|     public string main; | ||||
|     public string fallback; | ||||
|  | @ -234,59 +242,22 @@ public class CDNLoader : MonoBehaviour | |||
|     /// </summary> | ||||
|     /// <param name="url"></param> | ||||
|     /// <param name="onComplete"></param> | ||||
|     /// <param name="onFail"></param> | ||||
|     /// <param name="id">多条加载的时候请给 ID 值</param> | ||||
|     /// <param name="onProgress"></param> | ||||
|     public void LoadText(string url, Action<string, string> onComplete, Action<string> onFail, Action<float> onProgress = null) | ||||
|     public void LoadAsset(string url, LoadType type = LoadType.Text, string id = "",  | ||||
|         Action<LoadResult> onComplete = null,  Action<float> onProgress = null) | ||||
|     { | ||||
|         if (string.IsNullOrEmpty(id)) id = url; // id 为空的情况下, 使用 URL 作为唯一标识 | ||||
|         AddTask(new LoadTask() | ||||
|         { | ||||
|             id = id, | ||||
|             url = url, | ||||
|             onGetString = onComplete, | ||||
|             onFail =  onFail, | ||||
|             onComplete = onComplete, | ||||
|             onProgress =  onProgress, | ||||
|             type = LoadType.Text | ||||
|             type = type, | ||||
|         }); | ||||
|     } | ||||
|      | ||||
|     /// <summary> | ||||
|     /// 加载文本 | ||||
|     /// </summary> | ||||
|     /// <param name="url"></param> | ||||
|     /// <param name="onComplete"></param> | ||||
|     /// <param name="onFail"></param> | ||||
|     /// <param name="onProgress"></param> | ||||
|     public void LoadFile(string url, string fileStr, Action<string, byte[], string> onComplete, Action<string> onFail, Action<float> onProgress = null) | ||||
|     { | ||||
|         AddTask(new LoadTask() | ||||
|         { | ||||
|             url = url, | ||||
|             onGetBytes = onComplete, | ||||
|             onFail =  onFail, | ||||
|             onProgress =  onProgress, | ||||
|             type = LoadType.Bytes, | ||||
|             fileName = fileStr | ||||
|         }); | ||||
|     } | ||||
|      | ||||
|     /// <summary> | ||||
|     /// 加载文本 | ||||
|     /// </summary> | ||||
|     /// <param name="url"></param> | ||||
|     /// <param name="onComplete"></param> | ||||
|     /// <param name="onFail"></param> | ||||
|     /// <param name="onProgress"></param> | ||||
|     public void LoadTexture2D(string url, Action<Texture2D> onComplete, Action<string> onFail, Action<float> onProgress = null) | ||||
|     { | ||||
|         AddTask(new LoadTask() | ||||
|         { | ||||
|             url = url, | ||||
|             onGetTexture = onComplete, | ||||
|             onFail =  onFail, | ||||
|             onProgress =  onProgress, | ||||
|             type = LoadType.Bytes | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|     #endregion | ||||
|      | ||||
|     #region 加载队列 | ||||
|  | @ -320,7 +291,6 @@ public class CDNLoader : MonoBehaviour | |||
|             Debug.Log($"<color=#88ff00>--- 下载地址: { task.fixedUrl }</color>"); | ||||
|             // Debug.Log($"--- _useFallback: {_useFallback}"); | ||||
|             // Debug.Log($"--- _retryNum: {_retryNum}"); | ||||
| 
 | ||||
|             // 使用Using初始化加载器 | ||||
|             using (UnityWebRequest www = UnityWebRequest.Get(task.fixedUrl)) | ||||
|             { | ||||
|  | @ -331,25 +301,30 @@ public class CDNLoader : MonoBehaviour | |||
| 
 | ||||
|                 www.timeout = _config.timeout; | ||||
|                 yield return www.SendWebRequest(); | ||||
| 
 | ||||
|                  | ||||
|                 var result = LoadResult.Create(task); | ||||
|                 if (www.result == UnityWebRequest.Result.Success) | ||||
|                 { | ||||
|                     switch (task.type) | ||||
|                     bool success = www.downloadHandler != null; | ||||
|                     result.success = success; | ||||
|                     if (success) | ||||
|                     { | ||||
|                         case LoadType.Text: | ||||
|                             task.onGetString?.Invoke(www.downloadHandler.text, task.fileName); | ||||
|                             break; | ||||
|                         case LoadType.Bytes: | ||||
|                             task.onGetBytes?.Invoke(www.url, www.downloadHandler.data, task.fileName); | ||||
|                             break; | ||||
|                         case LoadType.Texture2D: | ||||
|                             var handler2D = www.downloadHandler as DownloadHandlerTexture; | ||||
|                             task.onGetTexture?.Invoke(handler2D?.texture ? handler2D.texture : null); | ||||
|                             break; | ||||
|                         default: | ||||
|                             //TODO 请扩展更多的加载接口 | ||||
|                             break; | ||||
|                         switch (task.type) | ||||
|                         { | ||||
|                          | ||||
|                             case LoadType.Bytes: | ||||
|                                 result.data = www.downloadHandler.data; | ||||
|                                 break; | ||||
|                             case LoadType.Texture2D: | ||||
|                                 var handler2D = www.downloadHandler as DownloadHandlerTexture; | ||||
|                                 result.texture = (handler2D?.texture ? handler2D?.texture : null); | ||||
|                                 break; | ||||
|                             default: | ||||
|                                 result.text = www.downloadHandler.text; | ||||
|                                 break; | ||||
|                         } | ||||
|                     } | ||||
|                     task.onComplete?.Invoke(result); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|  | @ -362,7 +337,9 @@ public class CDNLoader : MonoBehaviour | |||
|                     { | ||||
|                         if (task.useFallback) | ||||
|                         { | ||||
|                             task.onFail(www.error); | ||||
|                             result.success = false; | ||||
|                             result.error = www.error; | ||||
|                             task.onComplete?.Invoke(result); | ||||
|                             task.Dispose(); | ||||
|                         } | ||||
|                         else | ||||
|  | @ -384,7 +361,6 @@ public class CDNLoader : MonoBehaviour | |||
|         } | ||||
|     } | ||||
|      | ||||
|      | ||||
|     #endregion | ||||
| 
 | ||||
|     #region 单元测试 | ||||
|  | @ -407,13 +383,41 @@ public class CDNLoader : MonoBehaviour | |||
| 
 | ||||
|     #endregion | ||||
|      | ||||
| } | ||||
|     #region 加载结果 | ||||
| 
 | ||||
| public enum LoadType | ||||
| { | ||||
|     Text, | ||||
|     Bytes, | ||||
|     Texture2D, | ||||
|     /// <summary> | ||||
|     /// 加载结果 | ||||
|     /// </summary> | ||||
|     public class LoadResult | ||||
|     { | ||||
|         public string id; | ||||
|         public LoadType type; | ||||
|         public bool success = false; | ||||
|         public string url; | ||||
|         public string error; | ||||
|         public string text = ""; | ||||
|         public byte[] data = null; | ||||
|         public Texture2D texture = null; | ||||
|         public AssetBundle assetBundle = null; | ||||
|          | ||||
|          | ||||
|         internal static LoadResult Create(LoadTask task, bool success = false, string error = "") | ||||
|         { | ||||
|             var result = new LoadResult() | ||||
|             { | ||||
|                 id = task.id, | ||||
|                 type = task.type, | ||||
|                 success = success, | ||||
|                 url = task.fixedUrl, | ||||
|                 error = error | ||||
|             }; | ||||
|             return result; | ||||
|         } | ||||
|          | ||||
|          | ||||
|     } | ||||
| 
 | ||||
|     #endregion | ||||
| } | ||||
| 
 | ||||
| /// <summary> | ||||
|  | @ -424,11 +428,8 @@ internal class LoadTask | |||
| { | ||||
|     public string url; | ||||
|     public string fixedUrl; | ||||
|     public string fileName; | ||||
|     public Action<string, string> onGetString; | ||||
|     public Action<string, byte[], string> onGetBytes; | ||||
|     public Action<Texture2D> onGetTexture; | ||||
|     public Action<string> onFail; | ||||
|     public string id; | ||||
|     public Action<CDNLoader.LoadResult> onComplete; | ||||
|     public Action<float> onProgress; | ||||
|     public bool useFallback = false; | ||||
|     public int retryNum = 0; | ||||
|  | @ -437,10 +438,8 @@ internal class LoadTask | |||
| 
 | ||||
|     public void Dispose() | ||||
|     { | ||||
|         onGetString = null; | ||||
|         onGetBytes = null; | ||||
|         onGetTexture = null; | ||||
|         onFail = null; | ||||
|         onComplete = null; | ||||
|         onProgress = null; | ||||
|     } | ||||
| } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue