From d2c939e4b4fd242440e2e318282858e5fff3cfe9 Mon Sep 17 00:00:00 2001 From: lcy <1459594991@qq.com> Date: 星期三, 21 五月 2025 17:35:47 +0800 Subject: [PATCH] 57 邮件系统 摘取封包查看工具和封包详情工具 --- Assets/Editor/Web/NetPkgTool.cs.meta | 12 + Assets/Editor/Web/NetPkgTool.cs | 348 +++++++++++++++++++++++++++++++++++++++++++ Assets/Editor/Web/PackageDetailsWindow.cs | 56 +++++++ Assets/Editor/Web/PackageDetailsWindow.cs.meta | 12 + Assets/Editor/Web.meta | 8 + 5 files changed, 436 insertions(+), 0 deletions(-) diff --git a/Assets/Editor/Web.meta b/Assets/Editor/Web.meta new file mode 100644 index 0000000..6ac8eed --- /dev/null +++ b/Assets/Editor/Web.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f75979479506c0647ba85b16cae93fa6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Web/NetPkgTool.cs b/Assets/Editor/Web/NetPkgTool.cs new file mode 100644 index 0000000..c8c6a43 --- /dev/null +++ b/Assets/Editor/Web/NetPkgTool.cs @@ -0,0 +1,348 @@ +锘縰sing System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; +using System.Text.RegularExpressions; +using System.Threading; + +public class NetPackageWindow : EditorWindow +{ + public static NetPackageWindow window = null; + + [UnityEditor.MenuItem("绋嬪簭/灏佸寘鏌ョ湅宸ュ叿 &1")] + static void Init() + { + window = GetWindow(typeof(NetPackageWindow), false, "灏佸寘鏌ョ湅宸ュ叿") as NetPackageWindow; + window.Show(); + window.autoRepaintOnSceneChange = true; + } + + static int MAX_PACKAGE_COUNT = 200; + + private Vector2 scrollPosition; + string stopRecBtnDetail = "鏆傚仠鎺ユ敹鍖�"; + bool professionalSkin; + string filterNetPkgStr; + + private string simSendPkgDetail = ""; + NetPackagetType m_CurrentType = NetPackagetType.All; + + bool reveralFilter; + bool showHeartPackage; + + bool showMainServerPackage; + bool showCrossServerPackage; + int maxShowPackageCount; + + bool threading = true; + List<NetPackage> m_DrawPackages = new List<NetPackage>(); + List<NetPackage> drawPackages { + get { lock (this) { return m_DrawPackages; } } + set { + lock (this) + { + m_DrawPackages = 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); + } + + 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(); + } + + public void CheckPackageShowState(NetPackage package) + { + if (m_CurrentType != NetPackagetType.All && m_CurrentType != package.type) + { + package.show = false; + return; + } + + if (!showMainServerPackage && package.socketType == ServerType.Main) + { + package.show = false; + return; + } + + if (!showCrossServerPackage && package.socketType == ServerType.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() + { + GUI.skin.customStyles[1].alignment = TextAnchor.UpperLeft; + GUI.skin.customStyles[1].fontStyle = FontStyle.Normal; + GUI.skin.customStyles[1].fixedWidth = 450; + + GUI.skin.button.normal.textColor = professionalSkin ? Color.white : Color.black; + + GUILayout.BeginVertical(); + + GUILayout.BeginHorizontal(); + + professionalSkin = !GUILayout.Toggle(!professionalSkin, "鏅�氱毊鑲�"); + professionalSkin = GUILayout.Toggle(professionalSkin, "楂樼骇鐨偆"); + + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + maxShowPackageCount = EditorGUILayout.IntField("鏈�澶ф樉绀哄皝鍖呮暟锛�", maxShowPackageCount); + showHeartPackage = GUILayout.Toggle(showHeartPackage, "蹇冭烦鍖�"); + showMainServerPackage = GUILayout.Toggle(showMainServerPackage, "涓绘湇"); + showCrossServerPackage = GUILayout.Toggle(showCrossServerPackage, "璺ㄦ湇"); + + 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(); + + GUILayout.BeginHorizontal(); + + filterNetPkgStr = EditorGUILayout.TextField("鍏抽敭瀛�", filterNetPkgStr); + reveralFilter = GUILayout.Toggle(reveralFilter, "鍙嶅悜杩囨护"); + + GUILayout.EndHorizontal(); + + SimSendPkg(); + scrollPosition = GUILayout.BeginScrollView(scrollPosition, false, false); + + var packages = NetPkgCtl.GetPackages(); + if (packages != null) + { + var count = 0; + for (int i = packages.Count - 1; i >= 0; i--) + { + var package = packages[i]; + if (package != null) + { + count++; + } + + if (count >= maxShowPackageCount) + { + break; + } + + if (package.show) + { + try + { + EditorGUILayout.BeginHorizontal(); + + if (professionalSkin) + { + 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 (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) + { + + } + } + + } + } + + GUILayout.EndScrollView(); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button(stopRecBtnDetail)) + { + NetPkgCtl.stopRecieve = !NetPkgCtl.stopRecieve; + if (NetPkgCtl.stopRecieve) + { + stopRecBtnDetail = "寮�濮嬫帴鏀跺寘"; + } + else + { + List<NetPackage> tempNetPkgLst = NetPkgCtl.GetTempPackages(); + if (packages != null) + { + packages.AddRange(tempNetPkgLst); + + while (packages.Count > MAX_PACKAGE_COUNT) + { + packages.RemoveAt(0); + } + } + + tempNetPkgLst.Clear(); + stopRecBtnDetail = "鏆傚仠鎺ユ敹鍖�"; + } + } + + if (GUILayout.Button("鎵撳嵃鎽樿")) + { + NetPkgCtl.WriteAllNetLog(false); + } + + if (GUILayout.Button("鎵撳嵃璇︽儏")) + { + NetPkgCtl.WriteAllNetLog(true); + } + + if (GUILayout.Button("娓呴櫎")) + { + if (NetPkgCtl.GetPackages() != null) + { + NetPkgCtl.GetPackages().Clear(); + } + } + + GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + } + + private void SimSendPkg() + { + GUILayout.BeginHorizontal(); + simSendPkgDetail = EditorGUILayout.TextField("妯℃嫙鍙戝寘鍐呭锛�", simSendPkgDetail); + if (GUILayout.Button("妯℃嫙鍙戝寘")) + { + string sendPkgDetail = simSendPkgDetail.Replace(" ", ""); + if (sendPkgDetail.Length % 2 != 0) + { + sendPkgDetail += " "; + } + byte[] sendBytes = new byte[sendPkgDetail.Length / 2]; + for (int i = 0; i < sendBytes.Length; i++) + { + sendBytes[i] = Convert.ToByte(sendPkgDetail.Substring(i * 2, 2), 16); + } + GameNetSystem.Instance.SendInfo(sendBytes); + } + GUILayout.EndHorizontal(); + } + + private string NetPkgTypeString() + { + switch (m_CurrentType) + { + case NetPackagetType.All: + return "鍏ㄩ儴"; + case NetPackagetType.Server: + return "鏀跺寘"; + case NetPackagetType.Client: + return "鍙戝寘"; + default: + return "鍏ㄩ儴"; + } + } +} + +public enum FilterType +{ + Filter = 0, + ReverFilter = 1, +} + + + diff --git a/Assets/Editor/Web/NetPkgTool.cs.meta b/Assets/Editor/Web/NetPkgTool.cs.meta new file mode 100644 index 0000000..e182585 --- /dev/null +++ b/Assets/Editor/Web/NetPkgTool.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1b3b3e900e100ed4baeb02ae01b1a257 +timeCreated: 1504662436 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Web/PackageDetailsWindow.cs b/Assets/Editor/Web/PackageDetailsWindow.cs new file mode 100644 index 0000000..08b436b --- /dev/null +++ b/Assets/Editor/Web/PackageDetailsWindow.cs @@ -0,0 +1,56 @@ +锘縰sing System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +public class PackageDetailsWindow : ScriptableWizard +{ + + static PackageDetailsWindow window; + public static string packageTime; + public static string packageName; + public static string packageBytes; + public static List<string> packageDetails; + + private Vector2 scrollPosition; + + private void OnGUI() + { + EditorGUILayout.BeginVertical(); + EditorGUILayout.Space(); + EditorGUILayout.LabelField("鍚嶇О锛�", !string.IsNullOrEmpty(packageName) ? packageName : ""); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("鏃堕棿锛�"+ packageTime); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("瀛楄妭娴侊細"); + EditorGUILayout.TextArea(string.IsNullOrEmpty(packageBytes) ? "" : packageBytes); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("瀛楁璇︽儏锛�"); + scrollPosition = GUILayout.BeginScrollView(scrollPosition, false, true); + + if (packageDetails != null) + { + for (int i = 0; i < packageDetails.Count; i++) + { + EditorGUILayout.TextField(packageDetails[i]); + } + } + + GUILayout.EndScrollView(); + + EditorGUILayout.EndVertical(); + } + + [UnityEditor.MenuItem("绋嬪簭/灏佸寘璇︽儏 &2")] + public static void CreatePackageDetailsWindow() + { + window = GetWindow(typeof(PackageDetailsWindow), false, "灏佸寘璇︽儏") as PackageDetailsWindow; + window.Show(); + window.autoRepaintOnSceneChange = true; + } +} + + diff --git a/Assets/Editor/Web/PackageDetailsWindow.cs.meta b/Assets/Editor/Web/PackageDetailsWindow.cs.meta new file mode 100644 index 0000000..305ae2d --- /dev/null +++ b/Assets/Editor/Web/PackageDetailsWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d61985cb201a8a54cb3bec03baaffd3f +timeCreated: 1509514067 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- Gitblit v1.8.0