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<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); }
|
}
|
|
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<NetPkg> tempNetPkgLst = NetPkgCtl.GetTempNetPkg();
|
if (NetPkgLst != null)
|
{
|
NetPkgLst.AddRange(tempNetPkgLst);
|
|
while (NetPkgLst.Count > MAX_PACKAGE_COUNT)
|
{
|
NetPkgLst.RemoveAt(0);
|
}
|
}
|
|
tempNetPkgLst.Clear();
|
stopRecBtnDetail = "暂停接收包";
|
}
|
}
|
|
if (GUILayout.Button("打印摘要"))
|
{
|
NetPkgCtl.WriteAllNetLog(false);
|
}
|
|
if (GUILayout.Button("打印详情"))
|
{
|
NetPkgCtl.WriteAllNetLog(true);
|
}
|
|
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,
|
}
|
|
|
|