| | |
| | | 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); }
|
| | | }
|
| | | string stopRecBtnDetail = "暂停接收包";
|
| | | bool professionalSkin;
|
| | | 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); }
|
| | | }
|
| | | NetPackagetType m_CurrentType = NetPackagetType.All;
|
| | |
|
| | | bool showHeartPackage {
|
| | | get { return LocalSave.GetBool("NetPackageHeartFillter", true); }
|
| | | 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 {
|
| | | 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 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()
|
| | | {
|
| | | NetPkgLst = NetPkgCtl.GetNetPkg();
|
| | |
|
| | | GUI.skin.customStyles[1].alignment = TextAnchor.UpperLeft;
|
| | | GUI.skin.customStyles[1].fontStyle = FontStyle.Normal;
|
| | | GUI.skin.customStyles[1].fixedWidth = 450;
|
| | |
| | | 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();
|
| | |
|
| | |
| | | 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);
|
| | | }
|
| | | }
|
| | |
|
| | |
| | |
|
| | | if (GUILayout.Button("清除"))
|
| | | {
|
| | | if (NetPkgCtl.GetNetPkg() != null)
|
| | | if (NetPkgCtl.GetPackages() != null)
|
| | | {
|
| | | NetPkgCtl.GetNetPkg().Clear();
|
| | | NetPkgCtl.GetPackages().Clear();
|
| | | }
|
| | | }
|
| | |
|
| | | GUILayout.EndHorizontal();
|
| | | GUILayout.EndVertical();
|
| | | }
|
| | |
|
| | |
|
| | | private void SimSendPkg()
|
| | | {
|
| | |
| | |
|
| | | 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 "全部";
|