From 99a11d2bb19d74f6cc8584ac16838062af4fb301 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 03 四月 2026 11:24:07 +0800
Subject: [PATCH] webgl 优化

---
 Main/Core/NetworkPackage/Socket/ClientSocket.cs |   32 +++++++++++++++++++++++++++++---
 1 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/Main/Core/NetworkPackage/Socket/ClientSocket.cs b/Main/Core/NetworkPackage/Socket/ClientSocket.cs
index 12a16c2..ae90b8d 100644
--- a/Main/Core/NetworkPackage/Socket/ClientSocket.cs
+++ b/Main/Core/NetworkPackage/Socket/ClientSocket.cs
@@ -32,6 +32,7 @@
     // WebSocket 瀹炵幇锛圵ebGL骞冲彴锛�
     WebSocket webSocket;
     public WebSocket socket { get { return webSocket; } }
+    private byte[] fragmentBytes; // TCP-to-WS缃戝叧鎸塗CP缂撳啿鍖烘媶鍖咃紝闇�瑕佽法娑堟伅閲嶇粍
 #endif
 
     public Action OnDisconnected;
@@ -489,8 +490,16 @@
         {
             getBytesTotal += data.Length;
             
-            // WebSocket鏄秷鎭ā寮忥紝姣忔鏀跺埌瀹屾暣鍖咃紝鐩存帴澶勭悊
             byte[] fixBytes = data;
+            // TCP-to-WS缃戝叧鎸塗CP缂撳啿鍖哄ぇ灏忔媶鍒嗭紝闇�璺ㄦ秷鎭噸缁勶紙涓嶵CP ReadInfo閫昏緫涓�鑷达級
+            if (fragmentBytes != null && fragmentBytes.Length > 0)
+            {
+                fixBytes = new byte[fragmentBytes.Length + data.Length];
+                Array.Copy(fragmentBytes, 0, fixBytes, 0, fragmentBytes.Length);
+                Array.Copy(data, 0, fixBytes, fragmentBytes.Length, data.Length);
+            }
+            fragmentBytes = null;
+
             int vReadIndex = 0;
             byte[] vPackBytes;
             int vLeavingLeng = 0;
@@ -503,14 +512,30 @@
                 vLeavingLeng = vTotalLeng - vReadIndex;
                 if (vLeavingLeng < 6)
                 {
-                    Debug.LogError($"[ClientSocket-WebSocket] 鍖呮暟鎹笉瓒�: {vLeavingLeng} bytes");
+                    fragmentBytes = new byte[vLeavingLeng];
+                    Array.Copy(fixBytes, vReadIndex, fragmentBytes, 0, vLeavingLeng);
+                    break;
+                }
+                
+                // 鏍¢獙FFCC鍖呭ご锛岄槻姝㈡暟鎹敊浣�
+                if (fixBytes[vReadIndex] != 0xFF || fixBytes[vReadIndex + 1] != 0xCC)
+                {
+                    Debug.LogError($"[ClientSocket-WebSocket] FFCC鍖呭ご寮傚父: {fixBytes[vReadIndex]:X2} {fixBytes[vReadIndex + 1]:X2}, 涓㈠純鍓╀綑 {vLeavingLeng} 瀛楄妭");
+                    fragmentBytes = null;
                     break;
                 }
                 
                 vBodyLeng = BitConverter.ToInt32(fixBytes, vReadIndex + 2);
+                if (vBodyLeng <= 0)
+                {
+                    Debug.LogError($"[ClientSocket-WebSocket] 鍖呬綋闀垮害闈炴硶: {vBodyLeng}, 涓㈠純");
+                    fragmentBytes = null;
+                    break;
+                }
                 if (vBodyLeng > vLeavingLeng - 6)
                 {
-                    Debug.LogError($"[ClientSocket-WebSocket] 鍖呴暱搴︿笉鍖归厤: 澹版槑 {vBodyLeng + 6}, 瀹為檯 {vLeavingLeng}");
+                    fragmentBytes = new byte[vLeavingLeng];
+                    Array.Copy(fixBytes, vReadIndex, fragmentBytes, 0, vLeavingLeng);
                     break;
                 }
                 
@@ -573,6 +598,7 @@
     public async void CloseConnect()
     {
         Debug.Log("[ClientSocket-WebSocket] ==== CloseConnect");
+        fragmentBytes = null;
         
         if (webSocket != null)
         {

--
Gitblit v1.8.0