hch
2025-09-03 0d84af61461f65211062c1b61f846432c3f7a475
0312 B430拆包解析
3个文件已修改
55 ■■■■■ 已修改文件
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/GameNetSystem.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB430_tagSCTurnFightReport.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
@@ -1,6 +1,7 @@
using UnityEngine;
using System.Collections;
using System;
using System.Text;
// B4 30 查看战报结果 #tagSCTurnFightReportRet
@@ -15,44 +16,46 @@
        HB430_tagSCTurnFightReport vNetData = vNetPack as HB430_tagSCTurnFightReport;
        // 战报结果
        string guid = vNetData.GUID;
        string guid = UIHelper.ServerStringTrim(vNetData.GUID);
        //约定 B430 内容(小包1长度WORD + 包1 + 小包2长度WORD + 包2)
        try
        {
            byte[] reportBytes = GameNetPackBasic.StrEncoding.GetBytes(vNetData.Report);
            int vReadIndex = 0;
            byte[] vPackBytes;
            int vLeavingLeng = 0;
            int vBodyLeng = 0;
            int vTotalLeng = reportBytes.Length;
            int vTotalLeng = vNetData.Report.Length;
            while (vReadIndex < vTotalLeng)
            {
                if (vLeavingLeng < 6)
                vLeavingLeng = vTotalLeng - vReadIndex;
                if (vLeavingLeng < 4)
                {
                    Debug.LogError("DTCB430_tagSCTurnFightReport: vLeavingLeng < 6 解包失败");
                    //包头至少需要4字节
                    Debug.LogError("DTCB430_tagSCTurnFightReport: vLeavingLeng < 2 解包失败");
                    break;
                }
                vBodyLeng = BitConverter.ToInt32(reportBytes, vReadIndex + 2);
                if (vBodyLeng > vLeavingLeng - 6)// 未完整的包 报错
                //约定小封包的长度
                vBodyLeng = BitConverter.ToInt16(vNetData.reportBytes, vReadIndex);
                if (vBodyLeng > vLeavingLeng)// 未完整的包 报错
                {
                    Debug.LogError("DTCB430_tagSCTurnFightReport: vBodyLeng > vLeavingLeng - 6 解包失败");
                    Debug.LogError("DTCB430_tagSCTurnFightReport: vBodyLeng > vLeavingLeng解包失败");
                    break;
                }
                vPackBytes = new byte[vBodyLeng];
                Array.Copy(reportBytes, vReadIndex + 6, vPackBytes, 0, vBodyLeng);
                vPackBytes = encoder.BaseXorSub(vPackBytes);
                Array.Copy(vNetData.reportBytes, vReadIndex + 2, vPackBytes, 0, vBodyLeng);
                Array.Copy(vPackBytes, 0, vCmdBytes, 0, 2);
                var cmd = (ushort)((ushort)(vCmdBytes[0] << 8) + vCmdBytes[1]);
                bool isRegist = false;  // 未注册封包处理
                Debug.Log("DTCB430_tagSCTurnFightReport: 拆解分包 长度:" + vBodyLeng + " cmd:" + cmd);
                if (PackageRegedit.Contain(cmd))
                {
                    GameNetPackBasic vNetpack = PackageRegedit.TransPack(ServerType.Main, cmd, vPackBytes);
                    GameNetPackBasic vNetpack = PackageRegedit.TransPack(ServerType.B430, cmd, vPackBytes);
                    if (vNetpack != null)
                    {
                        BattleManager.Instance.PushPackage(guid, vNetpack);
@@ -60,13 +63,13 @@
                    }
                }
                vReadIndex += 6 + vBodyLeng;
                vReadIndex += 2 + vBodyLeng;
                // 未注册封包处理
                if (!isRegist)
                {
#if UNITY_EDITOR
                    PackageRegedit.TransPack(ServerType.Main, cmd, vPackBytes);
                    PackageRegedit.TransPack(ServerType.B430, cmd, vPackBytes);
#endif
                }
            }
Main/Core/NetworkPackage/GameNetSystem.cs
@@ -85,8 +85,8 @@
    public GameNetSystem()
    {
        var gameObject = new GameObject("NetUpdateBehaviour");
        GameObject.DontDestroyOnLoad(gameObject);
        m_NetUpdateBehaviour = gameObject.AddComponent<NetUpdateBehaviour>();
        GameObject.DontDestroyOnLoad(gameObject);
        m_NetUpdateBehaviour = gameObject.AddComponent<NetUpdateBehaviour>();
        m_NetUpdateBehaviour.RegisterUpdateCallBack(OnUpdate);
        neverConnectState = gameObject.AddComponent<NeverConnectState>();
@@ -308,4 +308,5 @@
public enum ServerType
{
    Main = 1,
    B430 = 2,
}
Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB430_tagSCTurnFightReport.cs
@@ -1,5 +1,6 @@
using UnityEngine;
using System.Collections;
using System;
// B4 30 查看战报结果 #tagSCTurnFightReportRet
@@ -8,14 +9,20 @@
    public uint Len;
    public string Report;    //完整战报
    public HB430_tagSCTurnFightReport () {
    public byte[] reportBytes;
    public HB430_tagSCTurnFightReport()
    {
        _cmd = (ushort)0xB430;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out GUID, vBytes, NetDataType.Chars, 40);
        TransBytes (out Len, vBytes, NetDataType.DWORD);
        TransBytes (out Report, vBytes, NetDataType.Chars, Len);
    public override void ReadFromBytes(byte[] vBytes)
    {
        TransBytes(out GUID, vBytes, NetDataType.Chars, 40);
        TransBytes(out Len, vBytes, NetDataType.DWORD);
        TransBytes(out Report, vBytes, NetDataType.Chars, Len);
        reportBytes = new byte[Len];
        Array.Copy(vBytes, 46, reportBytes, 0, Len);
    }
}