From 89ef46a926d5b7a05cf4c0b35d4849395667f90a Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 11 五月 2026 16:07:25 +0800
Subject: [PATCH] WEBGL跟安卓混合开发 资源加载异步

---
 Main/Core/NetworkPackage/Socket/ClientSocket.cs |   70 +++++++++--------------------------
 1 files changed, 18 insertions(+), 52 deletions(-)

diff --git a/Main/Core/NetworkPackage/Socket/ClientSocket.cs b/Main/Core/NetworkPackage/Socket/ClientSocket.cs
index 52fecdf..f2fa088 100644
--- a/Main/Core/NetworkPackage/Socket/ClientSocket.cs
+++ b/Main/Core/NetworkPackage/Socket/ClientSocket.cs
@@ -219,11 +219,13 @@
             if (m_packageThread != null)
             {
                 m_packageThread.Abort();
+                m_packageThread = null;
             }
         }
         catch (System.Exception ex)
         {
             Debug.Log(ex);
+            m_packageThread = null;
         }
 
         try
@@ -250,29 +252,19 @@
     {
         if (m_packageThread != null)
         {
-            m_packageThread.Abort();
-            m_packageThread = null;
-        }
-
-        m_LastPackageTime = DateTime.Now;
-        m_packageThread = new Thread(new ThreadStart(ReceiveInfo)); // 鍚姩绾跨▼鎺ユ敹淇℃伅
-        m_packageThread.IsBackground = true;
-        m_packageThread.Start();
-        isStopTreading = false;
-        Debug.unityLogger.logEnabled = true;
-        Debug.Log("[ClientSocket][OnConnectSuccess] 杩炴帴鎴愬姛锛屽惎鍔ㄦ帴鏀剁嚎绋�");
-        if (m_packageThread != null)
-        {
             Debug.LogWarning("[ClientSocket][OnConnectSuccess] m_packageThread宸插瓨鍦紝鍏圓bort");
             m_packageThread.Abort();
             m_packageThread = null;
         }
 
+        fragmentBytes = null; // 娓呴櫎涓婃杩炴帴娈嬬暀鐨勭鐗囩紦瀛�
         m_LastPackageTime = DateTime.Now;
+        isStopTreading = false;
         m_packageThread = new Thread(new ThreadStart(ReceiveInfo)); // 鍚姩绾跨▼鎺ユ敹淇℃伅
         m_packageThread.IsBackground = true;
         m_packageThread.Start();
-        isStopTreading = false;
+        Debug.unityLogger.logEnabled = true;
+        Debug.Log("[ClientSocket][OnConnectSuccess] 杩炴帴鎴愬姛锛屽惎鍔ㄦ帴鏀剁嚎绋�");
     }
 
     /// <summary>
@@ -280,44 +272,6 @@
     /// </summary>
     private void ReceiveInfo()
     {
-        while (!isStopTreading)
-        {
-            try
-            {
-                var shutdown = false;
-                if (!m_Socket.Connected)
-                {
-                    shutdown = true;
-                }
-
-                if (!shutdown)
-                {
-                    var dataLength = m_Socket.Receive(bufferBytes);
-                    if (dataLength <= 0)
-                    {
-                        shutdown = true;
-                    }
-                    else
-                    {
-                        getBytesTotal += dataLength;
-                        var bytes = new byte[dataLength];
-                        Array.Copy(bufferBytes, 0, bytes, 0, dataLength);
-                        ReadInfo(bytes);
-                    }
-                }
-
-                if (shutdown)
-                {
-                    isStopTreading = true;
-                    m_Socket.Shutdown(SocketShutdown.Both);
-                    m_Socket.Close();
-                }
-            }
-            catch (Exception e)
-            {
-                Debug.Log(e);
-            }
-        }
         Debug.unityLogger.logEnabled = true;
         Debug.Log("[ClientSocket][ReceiveInfo] 鎺ユ敹绾跨▼鍚姩");
         while (!isStopTreading)
@@ -401,9 +355,21 @@
                     Array.Copy(fixBytes, vReadIndex, fragmentBytes, 0, vLeavingLeng);
                     break;
                 }
+                // 鎵撳嵃鍖呭ご鍘熷瀛楄妭锛屼究浜庢帓鏌� OverflowException
+                byte h0 = fixBytes[vReadIndex], h1 = fixBytes[vReadIndex + 1],
+                     h2 = fixBytes[vReadIndex + 2], h3 = fixBytes[vReadIndex + 3],
+                     h4 = fixBytes[vReadIndex + 4], h5 = fixBytes[vReadIndex + 5];
                 vBodyLeng = BitConverter.ToInt32(fixBytes, vReadIndex + 2);
+                Debug.Log($"[ClientSocket][ReadInfo] vReadIndex={vReadIndex} vTotalLeng={vTotalLeng} vLeavingLeng={vLeavingLeng} header=[{h0:X2} {h1:X2} {h2:X2} {h3:X2} {h4:X2} {h5:X2}] vBodyLeng={vBodyLeng}");
+                if (vBodyLeng < 0)
+                {
+                    Debug.LogError($"[ClientSocket][ReadInfo] vBodyLeng寮傚父({vBodyLeng})锛屼涪寮冨墿浣欐暟鎹紒fragmentBytes鎬婚暱={fixBytes.Length} vReadIndex={vReadIndex}");
+                    fragmentBytes = null;
+                    break;
+                }
                 if (vBodyLeng > vLeavingLeng - 6)// 鏈畬鏁寸殑鍖呭垯鐣欏寘
                 {
+                    Debug.Log($"[ClientSocket][ReadInfo] 鍖呬笉瀹屾暣锛岀暀鍖�: vBodyLeng={vBodyLeng} vLeavingLeng={vLeavingLeng}");
                     fragmentBytes = new byte[vLeavingLeng];
                     Array.Copy(fixBytes, vReadIndex, fragmentBytes, 0, vLeavingLeng);
                     break;

--
Gitblit v1.8.0