Add hot-update boot pipeline, UI bundles/atlas assets, and design docs.
Ignore AIClient/Library and AIClient/HybridCLRData permanently; include HybridCLR/YooAsset project setup and UI tooling. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace AOT.Patch
|
||||
{
|
||||
public sealed class VersionClient
|
||||
{
|
||||
readonly string _url;
|
||||
readonly bool _allowStreamingFallback;
|
||||
|
||||
public VersionClient(string url, bool allowStreamingFallback)
|
||||
{
|
||||
_url = url;
|
||||
_allowStreamingFallback = allowStreamingFallback;
|
||||
}
|
||||
|
||||
public IEnumerator Fetch(Action<VersionInfo, string> onDone)
|
||||
{
|
||||
string error = null;
|
||||
VersionInfo info = null;
|
||||
|
||||
if (!string.IsNullOrEmpty(_url))
|
||||
{
|
||||
using (var req = UnityWebRequest.Get(_url))
|
||||
{
|
||||
req.timeout = 15;
|
||||
yield return req.SendWebRequest();
|
||||
#if UNITY_2020_2_OR_NEWER
|
||||
bool failed = req.result != UnityWebRequest.Result.Success;
|
||||
#else
|
||||
bool failed = req.isNetworkError || req.isHttpError;
|
||||
#endif
|
||||
if (!failed)
|
||||
{
|
||||
info = VersionInfo.FromJson(req.downloadHandler.text);
|
||||
if (info == null)
|
||||
error = "version.json parse failed";
|
||||
}
|
||||
else
|
||||
{
|
||||
error = req.error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (info == null && _allowStreamingFallback)
|
||||
{
|
||||
var localPath = Path.Combine(Application.streamingAssetsPath, "cdn", "version.json");
|
||||
yield return ReadLocalText(localPath, text =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
{
|
||||
info = VersionInfo.FromJson(text);
|
||||
if (info != null)
|
||||
error = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onDone?.Invoke(info, error);
|
||||
}
|
||||
|
||||
static IEnumerator ReadLocalText(string path, Action<string> onDone)
|
||||
{
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
using (var req = UnityWebRequest.Get(path))
|
||||
{
|
||||
yield return req.SendWebRequest();
|
||||
#if UNITY_2020_2_OR_NEWER
|
||||
bool failed = req.result != UnityWebRequest.Result.Success;
|
||||
#else
|
||||
bool failed = req.isNetworkError || req.isHttpError;
|
||||
#endif
|
||||
onDone?.Invoke(failed ? null : req.downloadHandler.text);
|
||||
}
|
||||
#else
|
||||
if (File.Exists(path))
|
||||
onDone?.Invoke(File.ReadAllText(path));
|
||||
else
|
||||
onDone?.Invoke(null);
|
||||
yield break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user