少年修仙传客户端基础资源
client_Wu Xijin
2019-02-14 54fad068f41ba7b0d2f16699a3f774be2a0d84e9
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); }
    }
    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;
@@ -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 "全部";