using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.Windows.Forms; using System; using System.Reflection; public class NetPkgTool : EditorWindow { public static NetPkgTool window = null; [UnityEditor.MenuItem("程序/封包查看工具 &1")] static void Init() { window = GetWindow(typeof(NetPkgTool), false, "封包查看工具") as NetPkgTool; window.Show(); window.autoRepaintOnSceneChange = true; } static int MAX_PACKAGE_COUNT = 200; private static List 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); } } private string simSendPkgDetail = ""; private NetPkgType m_CurNetPkgType = NetPkgType.All; private bool reveralFilter { get { return LocalSave.GetBool("NetPkgToolFilterNetPackageReveralFilter", false); } set { LocalSave.SetBool("NetPkgToolFilterNetPackageReveralFilter", value); } } bool showHeartPackage { get { return LocalSave.GetBool("NetPackageHeartFillter", true); } set { LocalSave.SetBool("NetPackageHeartFillter", value); } } static int maxShowPackageCount { get { return LocalSave.GetInt("NetPackageShowMaxCount", 100); } set { LocalSave.SetInt("NetPackageShowMaxCount", value); } } 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; 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, "心跳包"); 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; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); filterNetPkgStr = EditorGUILayout.TextField("关键字", filterNetPkgStr); reveralFilter = GUILayout.Toggle(reveralFilter, "反向过滤"); GUILayout.EndHorizontal(); SimSendPkg(); scrollPosition = GUILayout.BeginScrollView(scrollPosition, false, false); if (NetPkgLst != null) { string[] filters = null; if (!string.IsNullOrEmpty(filterNetPkgStr)) { filters = filterNetPkgStr.Split(' '); } var showCount = 0; for (int i = NetPkgLst.Count - 1; i >= 0; i--) { if (NetPkgLst[i] == null) { continue; } if (m_CurNetPkgType != NetPkgType.All && m_CurNetPkgType != NetPkgLst[i].NetPkgTp) { continue; } if (!showHeartPackage && (NetPkgLst[i].GameNetName.Contains("OnlineReturn") || NetPkgLst[i].GameNetName.Contains("ServerHeart") || NetPkgLst[i].GameNetName.Contains("OnlineReply"))) { continue; } showCount++; if (showCount >= maxShowPackageCount) { break; } if (filters != null) { var contain = false; foreach (var filter in filters) { if (NetPkgLst[i].GameNetName.Contains(filter)) { contain = true; break; } } if (reveralFilter && contain) { 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) { stopRecBtnDetail = "开始接收包"; } else { List tempNetPkgLst = NetPkgCtl.GetTempNetPkg(); if (NetPkgLst != null) { NetPkgLst.AddRange(tempNetPkgLst); while (NetPkgLst.Count > MAX_PACKAGE_COUNT) { NetPkgLst.RemoveAt(0); } } tempNetPkgLst.Clear(); stopRecBtnDetail = "暂停接收包"; } } if (GUILayout.Button("清除")) { if (NetPkgCtl.GetNetPkg() != null) { NetPkgCtl.GetNetPkg().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_CurNetPkgType) { case NetPkgType.All: return "全部"; case NetPkgType.Server: return "收包"; case NetPkgType.Client: return "发包"; default: return "全部"; } } } public enum FilterType { Filter = 0, ReverFilter = 1, }