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