From ad754b0ed9a65f2ca8d705210beab9b055fe2664 Mon Sep 17 00:00:00 2001 From: yyl <yyl> Date: 星期二, 20 五月 2025 14:30:34 +0800 Subject: [PATCH] launch部分的修改(重复检验下载的bytes的问题) --- Assets/Launch/Common/DownLoadAndDiscompressTask.cs | 214 ++++++++++++++++++++++++------------------ Assets/Launch/Manager/LocalResManager.cs | 46 +++++---- Assets/Launch/Common/AssetVersion.cs | 14 ++ Assets/Launch/Launch.cs | 8 + 4 files changed, 165 insertions(+), 117 deletions(-) diff --git a/Assets/Launch/Common/AssetVersion.cs b/Assets/Launch/Common/AssetVersion.cs index e68bf5a..3440015 100644 --- a/Assets/Launch/Common/AssetVersion.cs +++ b/Assets/Launch/Common/AssetVersion.cs @@ -1,5 +1,6 @@ 锘縰sing UnityEngine; using System.IO; +using System.Collections.Generic; namespace LaunchCommon { @@ -52,9 +53,8 @@ } } - - - public bool CheckLocalFileValid() + //checkList 鐢ㄤ簬澶栭儴妫�鏌ユ枃浠朵笅杞藉悗鏄惁涓�鑷达紝涓嶅寘鍚病鏈夋枃浠剁殑鎯呭喌 + public bool CheckLocalFileValid(List<bool> checkList = null) { string path = StringUtility.Contact(ResourcesPath.Instance.ExternalStorePath, m_RelativePath); var fileInfo = new FileInfo(path); @@ -66,12 +66,20 @@ } if (fileInfo.Length != size) { + if (checkList != null && checkList.Count == 0) + { + checkList.Add(false); + } Debug.LogFormat("{0}鏂囦欢澶у皬涓嶅{1}-{2}", path, size, fileInfo.Length); return false; } var fileMD5 = FileExtersion.GetMD5HashFromFile(path); if (fileMD5 != md5) { + if (checkList != null && checkList.Count == 0) + { + checkList.Add(false); + } Debug.LogFormat("{0}鏂囦欢md5涓嶅{1}-{2}", path, md5, fileMD5); return false; } diff --git a/Assets/Launch/Common/DownLoadAndDiscompressTask.cs b/Assets/Launch/Common/DownLoadAndDiscompressTask.cs index a54b60d..cd5002b 100644 --- a/Assets/Launch/Common/DownLoadAndDiscompressTask.cs +++ b/Assets/Launch/Common/DownLoadAndDiscompressTask.cs @@ -5,120 +5,146 @@ using LaunchCommon; -public class DownLoadAndDiscompressTask : Singleton<DownLoadAndDiscompressTask> -{ - public const int BYTE_PER_KILOBYTE = 1024; + public class DownLoadAndDiscompressTask : Singleton<DownLoadAndDiscompressTask> - public float progress { get { return Mathf.Clamp01((float)DownloadMgr.Instance.DownloadedBytes / totalSize); } } - - List<AssetVersion> tasks = new List<AssetVersion>(); - public bool isDone { get { return step == Step.Completed; } } - public int totalSize { get; private set; } - public int totalCount { get; private set; } - - public event Action<Step> downLoadStepChangeEvent; - - Action downLoadOkCallBack; - - Step m_Step = Step.None; - public Step step { - get { return m_Step; } - set - { - if (m_Step != value) - { - m_Step = value; + public const int BYTE_PER_KILOBYTE = 1024; - if (downLoadStepChangeEvent != null) + public float progress { get { return Mathf.Clamp01((float)DownloadMgr.Instance.DownloadedBytes / totalSize); } } + + List<AssetVersion> tasks = new List<AssetVersion>(); + public bool isDone { get { return step == Step.Completed; } } + public int totalSize { get; private set; } + public int totalCount { get; private set; } + + public event Action<Step> downLoadStepChangeEvent; + + Action downLoadOkCallBack; + + Step m_Step = Step.None; + public Step step + { + get { return m_Step; } + set + { + if (m_Step != value) { - downLoadStepChangeEvent(m_Step); + m_Step = value; + + if (downLoadStepChangeEvent != null) + { + downLoadStepChangeEvent(m_Step); + } } } } - } - public void Prepare(List<LaunchCommon.AssetVersion> _downLoadTasks, Action _downLoadOkCallBack) - { - tasks = _downLoadTasks; - downLoadOkCallBack = _downLoadOkCallBack; - - totalCount = tasks.Count; - step = Step.DownLoadPrepared; - totalSize = 0; - - for (int i = 0; i < tasks.Count; i++) + public void Prepare(List<AssetVersion> _downLoadTasks, Action _downLoadOkCallBack) { - var task = tasks[i]; - totalSize += task.size; - } + tasks = _downLoadTasks; + downLoadOkCallBack = _downLoadOkCallBack; - StartDownLoad(); + totalCount = tasks.Count; + step = Step.DownLoadPrepared; + totalSize = 0; - } - - public void StartDownLoad() - { - step = Step.DownLoad; - DownloadMgr.Instance.StartCoroutine(Co_StartDownLoad()); - - } - - IEnumerator Co_StartDownLoad() - { - while (tasks.Count > 0) - { - DownloadMgr.MaxDownLoadTask = 10; - DownloadMgr.Instance.Prepare(); for (int i = 0; i < tasks.Count; i++) { - var assetVersion = tasks[i]; - var remoteURL = StringUtility.Contact(LocalResManager.Instance.versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), LocalResManager.fixPath, "/", assetVersion.relativePath); - var localURL = StringUtility.Contact(ResourcesPath.Instance.ExternalStorePath, assetVersion.relativePath); - DownloadMgr.Instance.AddTask(new DownloadTask(remoteURL, localURL)); + var task = tasks[i]; + totalSize += task.size; } - DownloadMgr.Instance.Begin(); + StartDownLoad(); - while (!DownloadMgr.Instance.IsFinished) - { - yield return null; - } - - //妫�鏌ヤ笅杞藉畬鎴愬悗鐨勬枃浠舵槸鍚︽湁鏁� - var filledTasks = new List<AssetVersion>();//鏃犳晥鐨勬枃浠� - for (int i = 0; i < tasks.Count; i++) - { - var assetVersion = tasks[i]; - var correctFile = assetVersion.CheckLocalFileValid(); - if (correctFile) - assetVersion.localValid = true; - else - filledTasks.Add(assetVersion); - } - if (filledTasks.Count > 0) - Debug.LogErrorFormat("璧勬簮涓嬭浇瀹屽悗鏈墈0}涓枃浠舵棤鏁�({1})锛岄噸鏂板紑濮嬩笅杞�", filledTasks.Count, filledTasks[0].fileName); - tasks = filledTasks; } - Debug.Log("璧勬簮鍏ㄩ儴涓嬭浇瀹屾垚"); - - step = Step.Completed; - - if (downLoadOkCallBack != null) + public void StartDownLoad() { - downLoadOkCallBack(); - downLoadOkCallBack = null; + step = Step.DownLoad; + DownloadMgr.Instance.StartCoroutine(Co_StartDownLoad()); + } - } + IEnumerator Co_StartDownLoad() + { + int downLoadTryCount = 0; + List<bool> checkDownFile = new List<bool>(); + while (tasks.Count > 0) + { + DownloadMgr.MaxDownLoadTask = 10; + DownloadMgr.Instance.Prepare(); + for (int i = 0; i < tasks.Count; i++) + { + var assetVersion = tasks[i]; + var remoteURL = StringUtility.Contact(LocalResManager.Instance.versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), LocalResManager.fixPath, "/", assetVersion.relativePath); + var localURL = StringUtility.Contact(LocalResManager.Instance.ExternalStorePath, assetVersion.relativePath); + DownloadMgr.Instance.AddTask(new DownloadTask(remoteURL, localURL)); + } - public enum Step - { - None, - DownLoadPrepared, - DownLoad, - Completed, - } + DownloadMgr.Instance.Begin(); -} + while (!DownloadMgr.Instance.IsFinished) + { + yield return null; + } + + checkDownFile = new List<bool>(); + //妫�鏌ヤ笅杞藉畬鎴愬悗鐨勬枃浠舵槸鍚︽湁鏁� + var filledTasks = new List<AssetVersion>();//鏃犳晥鐨勬枃浠� + for (int i = 0; i < tasks.Count; i++) + { + var assetVersion = tasks[i]; + var correctFile = assetVersion.CheckLocalFileValid(checkDownFile); + if (correctFile) + assetVersion.localValid = true; + else + filledTasks.Add(assetVersion); + } + + if (filledTasks.Count > 0) + { + //鏂囦欢澶у皬鎴栬�匨D5涓嶅锛�1. cdn璧勬簮纭疄閿欒 2.cdn鎺ㄩ�佽繃绋嬩腑 鏂囦欢涓嶅尮閰� + //闇�瑕侀噸鏂颁笅杞絃ogicVersion鏂囦欢 + if (checkDownFile.Count > 0) + { + downLoadTryCount++; + } + Debug.LogErrorFormat("璧勬簮涓嬭浇瀹屽悗鏈墈0}涓枃浠舵棤鏁�({1})锛岄噸鏂板紑濮嬩笅杞�", filledTasks.Count, filledTasks[0].fileName); + + } + tasks = filledTasks; + if (downLoadTryCount >= 1) + { + LocalResManager.step = LocalResManager.LoadDllStep.PrepareDownLoad; + break; + } + } + + if (downLoadTryCount >= 1) + { + Debug.LogError("logic璧勬簮涓嬭浇澶辫触锛岃鍛婃彁绀猴紝閫�鍑哄崗绋�"); + LocalResManager.downLoadCount++; + yield break; + } + + Debug.Log("璧勬簮鍏ㄩ儴涓嬭浇瀹屾垚"); + + step = Step.Completed; + + if (downLoadOkCallBack != null) + { + downLoadOkCallBack(); + downLoadOkCallBack = null; + } + + } + + public enum Step + { + None, + DownLoadPrepared, + DownLoad, + Completed, + } + + } \ No newline at end of file diff --git a/Assets/Launch/Launch.cs b/Assets/Launch/Launch.cs index 6fe167d..8fb8727 100644 --- a/Assets/Launch/Launch.cs +++ b/Assets/Launch/Launch.cs @@ -265,6 +265,14 @@ private void PrepareDownLoad() { + if (LocalResManager.downLoadCount > 3) + { + LocalResManager.step = LocalResManager.LoadDllStep.None; + stop = true; + HttpBehaviour.ConnectAllTimes = 9999; + return; + } + LocalResManager.Instance.RequestLogicBytes(); } diff --git a/Assets/Launch/Manager/LocalResManager.cs b/Assets/Launch/Manager/LocalResManager.cs index 5fa4bc7..ffed131 100644 --- a/Assets/Launch/Manager/LocalResManager.cs +++ b/Assets/Launch/Manager/LocalResManager.cs @@ -64,6 +64,8 @@ public bool isPCTestDownLoad = false; + public static int downLoadCount = 0; + public static readonly string[] VERSION_URL = new string[] { "http://gamecenter.secondworld.net.cn:11000/center/appversion_new.php/?"}; @@ -275,34 +277,38 @@ } + static Dictionary<string, string> languageShowDict = new Dictionary<string, string>();//灏勪腑鏄剧ず鐨勫璇█鐗堟湰 + Dictionary<string, string> languageDict = new Dictionary<string, string>();// unity璇█閰嶇疆瀵瑰簲鐨勭害瀹氬瓧绗� + string defaultLanguage = string.Empty; public void InitDefaultLanguage() { - var config = InitialFunctionConfig.Get("Language").Numerical1; - Debug.LogFormat("绯荤粺璇█锛歿0} {1}", Application.systemLanguage, config); - if (string.IsNullOrEmpty(config)) - return; + if (languageShowDict == null || languageShowDict.Count == 0) + { + var config = InitialFunctionConfig.Get("Language"); + Debug.LogFormat("绯荤粺璇█锛歿0} {1}", Application.systemLanguage, config.Numerical1); + if (string.IsNullOrEmpty(config.Numerical1)) + return; + languageShowDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical1); + languageDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical5); + defaultLanguage = config.Numerical2; + if (!languageShowDict.ContainsKey(defaultLanguage)) + defaultLanguage = string.Empty; + } + + var id = LocalSave.GetString("LANGUAGE_ID1"); if (!string.IsNullOrEmpty(id)) return; - switch (Application.systemLanguage) + string languageMark = ((int)Application.systemLanguage).ToString(); + + if (languageDict.ContainsKey(languageMark)) { - case SystemLanguage.Chinese: - case SystemLanguage.ChineseSimplified: - case SystemLanguage.ChineseTraditional: - { - id = "zh"; - break; - } + id = languageDict[languageMark]; } - var json = JsonMapper.ToObject(config); - if (json.Keys.Contains(id)) - Id = id; - else - { - //寮�鍚殑鎯呭喌涓嬪繀椤昏鏈変釜榛樿鍊� - Id = InitialFunctionConfig.Get("Language").Numerical2; - } + + Id = languageShowDict.ContainsKey(id) ? id : defaultLanguage; + Debug.LogFormat("绯荤粺璇█锛歿0} 璁剧疆涓簕1}", Application.systemLanguage, Id); } //LogicBytes鏂囦欢鐨凪D5淇℃伅 -- Gitblit v1.8.0