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