From 920d7920c2a54382ca849be809932f0a5e80254a Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期五, 28 十二月 2018 14:27:01 +0800
Subject: [PATCH] 3335 更新封包查看工具

---
 Assets/Editor/Tool/NetPkgTool.cs |  323 +++++++++++++++++++++++++++++------------------------
 1 files changed, 179 insertions(+), 144 deletions(-)

diff --git a/Assets/Editor/Tool/NetPkgTool.cs b/Assets/Editor/Tool/NetPkgTool.cs
index 89a7313..0c854c4 100644
--- a/Assets/Editor/Tool/NetPkgTool.cs
+++ b/Assets/Editor/Tool/NetPkgTool.cs
@@ -2,76 +2,162 @@
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEditor;
-using System.Windows.Forms;
 using System;
-using System.Reflection;
+using System.Text.RegularExpressions;
+using System.Threading;
 
-public class NetPkgTool : EditorWindow
+public class NetPackageWindow : EditorWindow
 {
-    public static NetPkgTool window = null;
+    public static NetPackageWindow window = null;
 
     [UnityEditor.MenuItem("绋嬪簭/灏佸寘鏌ョ湅宸ュ叿 &1")]
     static void Init()
     {
-        window = GetWindow(typeof(NetPkgTool), false, "灏佸寘鏌ョ湅宸ュ叿") as NetPkgTool;
+        window = GetWindow(typeof(NetPackageWindow), false, "灏佸寘鏌ョ湅宸ュ叿") as NetPackageWindow;
         window.Show();
         window.autoRepaintOnSceneChange = true;
     }
 
     static int MAX_PACKAGE_COUNT = 200;
 
-    private static List<NetPkg> NetPkgLst = null;
-    private bool IsStopRecPkg = false;
     private Vector2 scrollPosition;
-    private string stopRecBtnDetail = "鏆傚仠鎺ユ敹鍖�";
-
-    private bool professionalSkin {
-        get { return LocalSave.GetBool("NetPackageSkinPattern", false); }
-        set { LocalSave.SetBool("NetPackageSkinPattern", value); }
-    }
-
-    private string filterNetPkgStr {
-        get { return LocalSave.GetString("NetPkgToolFilterNetPackageString"); }
-        set { LocalSave.SetString("NetPkgToolFilterNetPackageString", value); }
-    }
+    static string stopRecBtnDetail = "鏆傚仠鎺ユ敹鍖�";
+    static bool professionalSkin;
+    static string filterNetPkgStr;
 
     private string simSendPkgDetail = "";
-    private NetPkgType m_CurNetPkgType = NetPkgType.All;
-    private bool reveralFilter {
-        get { return LocalSave.GetBool("NetPkgToolFilterNetPackageReveralFilter", false); }
-        set { LocalSave.SetBool("NetPkgToolFilterNetPackageReveralFilter", value); }
-    }
+    static NetPackagetType m_CurrentType = NetPackagetType.All;
 
-    bool showHeartPackage {
-        get { return LocalSave.GetBool("NetPackageHeartFillter", true); }
+    static bool reveralFilter;
+    static bool showHeartPackage;
+
+    static bool showMainServerPackage;
+    static bool showCrossServerPackage;
+    static int maxShowPackageCount;
+
+    bool threading = true;
+    List<NetPackage> m_DrawPackages = new List<NetPackage>();
+    List<NetPackage> drawPackages {
+        get { lock (this) { return m_DrawPackages; } }
         set {
-            LocalSave.SetBool("NetPackageHeartFillter", value);
+            lock (this)
+            {
+                m_DrawPackages = value;
+            }
         }
     }
 
-    bool showMainServerPackage {
-        get { return LocalSave.GetBool("MainServerPackage", true); }
-        set {
-            LocalSave.SetBool("MainServerPackage", value);
-        }
+    private void OnDisable()
+    {
+        threading = false;
+
+        LocalSave.SetBool("NetPackageSkinPattern", professionalSkin);
+        LocalSave.SetInt("NetPackageShowMaxCount", maxShowPackageCount);
+        LocalSave.SetBool("CrossServerPackage", showCrossServerPackage);
+        LocalSave.SetBool("MainServerPackage", showMainServerPackage);
+        LocalSave.SetString("NetPkgToolFilterNetPackageString", filterNetPkgStr);
+        LocalSave.SetBool("NetPkgToolFilterNetPackageReveralFilter", reveralFilter);
     }
 
-    bool showCrossServerPackage {
-        get { return LocalSave.GetBool("CrossServerPackage", true); }
-        set {
-            LocalSave.SetBool("CrossServerPackage", value);
-        }
+    private void OnEnable()
+    {
+        professionalSkin = LocalSave.GetBool("NetPackageSkinPattern", false);
+        maxShowPackageCount = LocalSave.GetInt("NetPackageShowMaxCount", 100);
+        showCrossServerPackage = LocalSave.GetBool("CrossServerPackage", true);
+        showMainServerPackage = LocalSave.GetBool("MainServerPackage", true);
+        filterNetPkgStr = LocalSave.GetString("NetPkgToolFilterNetPackageString");
+        reveralFilter = LocalSave.GetBool("NetPkgToolFilterNetPackageReveralFilter", false);
+
+        var thread = new Thread(OnThreading);
+        thread.IsBackground = true;
+        thread.Start();
     }
 
-    static int maxShowPackageCount {
-        get { return LocalSave.GetInt("NetPackageShowMaxCount", 100); }
-        set { LocalSave.SetInt("NetPackageShowMaxCount", value); }
+    public static void CheckPackageShowState(NetPackage package)
+    {
+        if (m_CurrentType != NetPackagetType.All && m_CurrentType != package.type)
+        {
+            package.show = false;
+            return;
+        }
+
+        if (!showMainServerPackage && package.socketType == GameNetSystem.SocketType.Main)
+        {
+            package.show = false;
+            return;
+        }
+
+        if (!showCrossServerPackage && package.socketType == GameNetSystem.SocketType.CrossSever)
+        {
+            package.show = false;
+            return;
+        }
+
+        if (!showHeartPackage && Regex.IsMatch(package.name, ".*(OnlineReturn|ServerHeart|OnlineReply).*"))
+        {
+            package.show = false;
+            return;
+        }
+
+        if (!string.IsNullOrEmpty(filterNetPkgStr))
+        {
+            var contain = false;
+
+            try
+            {
+                contain = Regex.IsMatch(package.name, StringUtility.Contact(".*(", filterNetPkgStr.Replace(" ", "|"), ").*"));
+            }
+            catch (System.Exception ex)
+            {
+            }
+
+            if (reveralFilter && contain)
+            {
+                package.show = false;
+                return;
+            }
+            else if (!reveralFilter && !contain)
+            {
+                package.show = false;
+                return;
+            }
+        }
+
+        package.show = true;
+    }
+
+    private void OnThreading()
+    {
+        while (threading)
+        {
+            var packages = NetPkgCtl.GetPackages();
+            if (packages != null)
+            {
+                var showCount = 0;
+                for (int i = packages.Count - 1; i >= 0; i--)
+                {
+                    if (packages[i] == null)
+                    {
+                        packages.RemoveAt(i);
+                        continue;
+                    }
+
+                    showCount++;
+                    if (showCount >= maxShowPackageCount)
+                    {
+                        break;
+                    }
+
+                    CheckPackageShowState(packages[i]);
+                }
+            }
+
+            Thread.Sleep(50);
+        }
     }
 
     void OnGUI()
     {
-        NetPkgLst = NetPkgCtl.GetNetPkg();
-
         GUI.skin.customStyles[1].alignment = TextAnchor.UpperLeft;
         GUI.skin.customStyles[1].fontStyle = FontStyle.Normal;
         GUI.skin.customStyles[1].fixedWidth = 450;
@@ -93,9 +179,9 @@
         showMainServerPackage = GUILayout.Toggle(showMainServerPackage, "涓绘湇");
         showCrossServerPackage = GUILayout.Toggle(showCrossServerPackage, "璺ㄦ湇");
 
-        m_CurNetPkgType = GUILayout.Toggle(m_CurNetPkgType == NetPkgType.All, "鍏ㄩ儴") ? NetPkgType.All : m_CurNetPkgType;
-        m_CurNetPkgType = GUILayout.Toggle(m_CurNetPkgType == NetPkgType.Server, "鏀跺寘") ? NetPkgType.Server : m_CurNetPkgType;
-        m_CurNetPkgType = GUILayout.Toggle(m_CurNetPkgType == NetPkgType.Client, "鍙戝寘") ? NetPkgType.Client : m_CurNetPkgType;
+        m_CurrentType = GUILayout.Toggle(m_CurrentType == NetPackagetType.All, "鍏ㄩ儴") ? NetPackagetType.All : m_CurrentType;
+        m_CurrentType = GUILayout.Toggle(m_CurrentType == NetPackagetType.Server, "鏀跺寘") ? NetPackagetType.Server : m_CurrentType;
+        m_CurrentType = GUILayout.Toggle(m_CurrentType == NetPackagetType.Client, "鍙戝寘") ? NetPackagetType.Client : m_CurrentType;
 
         GUILayout.EndHorizontal();
 
@@ -107,134 +193,84 @@
         GUILayout.EndHorizontal();
 
         SimSendPkg();
-
         scrollPosition = GUILayout.BeginScrollView(scrollPosition, false, false);
 
-        if (NetPkgLst != null)
+        var packages = NetPkgCtl.GetPackages();
+        if (packages != null)
         {
-            string[] filters = null;
-            if (!string.IsNullOrEmpty(filterNetPkgStr))
+            var count = 0;
+            for (int i = packages.Count - 1; i >= 0; i--)
             {
-                filters = filterNetPkgStr.Split(' ');
-            }
-
-            var showCount = 0;
-            for (int i = NetPkgLst.Count - 1; i >= 0; i--)
-            {
-                if (NetPkgLst[i] == null)
+                var package = packages[i];
+                if (package != null)
                 {
-                    continue;
+                    count++;
                 }
 
-                if (m_CurNetPkgType != NetPkgType.All && m_CurNetPkgType != NetPkgLst[i].NetPkgTp)
-                {
-                    continue;
-                }
-
-                if (!showMainServerPackage && NetPkgLst[i].socketType == GameNetSystem.SocketType.Main)
-                {
-                    continue;
-                }
-
-                if (!showCrossServerPackage && NetPkgLst[i].socketType == GameNetSystem.SocketType.CrossSever)
-                {
-                    continue;
-                }
-
-                if (!showHeartPackage &&
-                    (NetPkgLst[i].GameNetName.Contains("OnlineReturn")
-                    || NetPkgLst[i].GameNetName.Contains("ServerHeart")
-                    || NetPkgLst[i].GameNetName.Contains("OnlineReply")))
-                {
-                    continue;
-                }
-
-                showCount++;
-                if (showCount >= maxShowPackageCount)
+                if (count >= maxShowPackageCount)
                 {
                     break;
                 }
 
-                if (filters != null)
+                if (package.show)
                 {
-                    var contain = false;
-                    foreach (var filter in filters)
+                    try
                     {
-                        if (NetPkgLst[i].GameNetName.Contains(filter))
+                        EditorGUILayout.BeginHorizontal();
+
+                        if (professionalSkin)
                         {
-                            contain = true;
-                            break;
+                            GUI.skin.button.normal.textColor = package.type == NetPackagetType.Client ? Color.yellow : Color.white;
                         }
-                    }
+                        else
+                        {
+                            GUI.skin.button.normal.textColor = package.type == NetPackagetType.Client ? Color.blue : Color.black;
+                        }
 
-                    if (reveralFilter && contain)
+                        if (GUILayout.Button(package.type == NetPackagetType.Client ? "CS" : "SC", GUILayout.Width(30)))
+                        {
+                            PackageDetailsWindow.packageTime = package.time;
+                            PackageDetailsWindow.packageName = package.name;
+                            PackageDetailsWindow.packageBytes = package.content;
+                            PackageDetailsWindow.packageDetails = package.fieldDetails;
+                        }
+
+                        GUI.skin.button.normal.textColor = professionalSkin ? Color.white : Color.black;
+                        var showName = StringUtility.Contact(package.time, "  ", package.name);
+                        EditorGUILayout.LabelField(showName, GUILayout.Width(260));
+                        EditorGUILayout.TextField(package.fields);
+
+                        EditorGUILayout.EndHorizontal();
+                    }
+                    catch (Exception ex)
                     {
-                        continue;
+
                     }
-                    else if (!reveralFilter && !contain)
-                    {
-                        continue;
-                    }
-                }
-
-                string pkgName = StringUtility.Contact(NetPkgLst[i].SendOrGetTime, "  ", NetPkgLst[i].GameNetName);
-                try
-                {
-                    EditorGUILayout.BeginHorizontal();
-
-                    if (professionalSkin)
-                    {
-                        GUI.skin.button.normal.textColor = NetPkgLst[i].NetPkgTp == NetPkgType.Client ? Color.yellow : Color.white;
-                    }
-                    else
-                    {
-                        GUI.skin.button.normal.textColor = NetPkgLst[i].NetPkgTp == NetPkgType.Client ? Color.blue : Color.black;
-                    }
-
-                    if (GUILayout.Button(NetPkgLst[i].NetPkgTp == NetPkgType.Client ? "CS" : "SC", GUILayout.Width(30)))
-                    {
-                        var pkg = NetPkgLst[i];
-                        PackageDetailsWindow.packageTime = pkg.SendOrGetTime;
-                        PackageDetailsWindow.packageName = pkg.GameNetName;
-                        PackageDetailsWindow.packageBytes = pkg.GameNetPkgStr;
-                        PackageDetailsWindow.packageDetails = pkg.fieldDetails;
-                    }
-
-                    GUI.skin.button.normal.textColor = professionalSkin ? Color.white : Color.black;
-
-                    EditorGUILayout.LabelField(pkgName, GUILayout.Width(260));
-                    EditorGUILayout.TextField(NetPkgLst[i].fields);
-
-                    EditorGUILayout.EndHorizontal();
-                }
-                catch (Exception ex)
-                {
-
                 }
 
             }
         }
+
         GUILayout.EndScrollView();
 
         GUILayout.BeginHorizontal();
         if (GUILayout.Button(stopRecBtnDetail))
         {
-            IsStopRecPkg = !IsStopRecPkg;
-            NetPkgCtl.IsStopRec = IsStopRecPkg;
-            if (IsStopRecPkg)
+            NetPkgCtl.stopRecieve = !NetPkgCtl.stopRecieve;
+            if (NetPkgCtl.stopRecieve)
             {
                 stopRecBtnDetail = "寮�濮嬫帴鏀跺寘";
             }
             else
             {
-                List<NetPkg> tempNetPkgLst = NetPkgCtl.GetTempNetPkg();
-                if (NetPkgLst != null)
+                List<NetPackage> tempNetPkgLst = NetPkgCtl.GetTempPackages();
+                if (packages != null)
                 {
-                    NetPkgLst.AddRange(tempNetPkgLst);
+                    packages.AddRange(tempNetPkgLst);
 
-                    while (NetPkgLst.Count > MAX_PACKAGE_COUNT)
+                    while (packages.Count > MAX_PACKAGE_COUNT)
                     {
-                        NetPkgLst.RemoveAt(0);
+                        packages.RemoveAt(0);
                     }
                 }
 
@@ -255,16 +291,15 @@
 
         if (GUILayout.Button("娓呴櫎"))
         {
-            if (NetPkgCtl.GetNetPkg() != null)
+            if (NetPkgCtl.GetPackages() != null)
             {
-                NetPkgCtl.GetNetPkg().Clear();
+                NetPkgCtl.GetPackages().Clear();
             }
         }
 
         GUILayout.EndHorizontal();
         GUILayout.EndVertical();
     }
-
 
     private void SimSendPkg()
     {
@@ -289,13 +324,13 @@
 
     private string NetPkgTypeString()
     {
-        switch (m_CurNetPkgType)
+        switch (m_CurrentType)
         {
-            case NetPkgType.All:
+            case NetPackagetType.All:
                 return "鍏ㄩ儴";
-            case NetPkgType.Server:
+            case NetPackagetType.Server:
                 return "鏀跺寘";
-            case NetPkgType.Client:
+            case NetPackagetType.Client:
                 return "鍙戝寘";
             default:
                 return "鍏ㄩ儴";

--
Gitblit v1.8.0