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