少年修仙传客户端代码仓库
4340 【前端】支持xlua方便IOS提审 修改网络封包系统,如果封包没有在C#注册,那么抛给lua
2个文件已修改
51 ■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/Socket/ClientSocketController.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -425,16 +425,13 @@
        }
    }
    static byte[] vCmdBytes = new byte[2];
    /// <summary>
    /// 转换一个协议包
    /// </summary>
    /// <param name="vBytes"></param>
    /// <returns></returns>
    public static GameNetPackBasic TransPack(byte[] vBytes)
    public static GameNetPackBasic TransPack( ushort cmd, byte[] vBytes)
    {
        vBytes = GameNetEncode.BaseXorSub(vBytes);
#if UNITY_EDITOR
        int length = vBytes.Length;
        string vStr = "";
@@ -444,12 +441,9 @@
        }
#endif
        Array.Copy(vBytes, 0, vCmdBytes, 0, 2);
        ushort vPackCmd = (ushort)((ushort)(vCmdBytes[0] << 8) + vCmdBytes[1]);
        if (packageTable.ContainsKey(vPackCmd)) // 存在相应的登记
        if (packageTable.ContainsKey(cmd)) // 存在相应的登记
        {
            var packageType = packageTable[vPackCmd];
            var packageType = packageTable[cmd];
            // 实例化并强转为协议包基类
            var packageInstance = packageType.Assembly.CreateInstance(packageType.Name) as GameNetPackBasic;
            packageInstance.ReadFromBytes(vBytes);// 解析内容
@@ -464,13 +458,6 @@
            NetPkgCtl.AddNetPkg(vStr, NetPkgType.Server, packageInstance.ToString(), FieldPrint.PrintFields(packageInstance), FieldPrint.PrintFieldsExpand(packageInstance, true));
#endif
            return packageInstance;
        }
        else
        {
#if UNITY_EDITOR
            NetPkgCtl.AddNetPkg(vStr, NetPkgType.Server, string.Empty, string.Empty, null);
            DebugEx.LogFormat("C#层收到未登记的解包协议:{0},{1}", vCmdBytes[0].ToString("x2"), vCmdBytes[1].ToString("x2"));
#endif
        }
        return null;
    }
Core/NetworkPackage/Socket/ClientSocketController.cs
@@ -9,8 +9,7 @@
public class ClientSocketController
{
    Socket m_Socket;
    public Socket socket
    {
    public Socket socket {
        get { return m_Socket; }
    }
@@ -205,6 +204,7 @@
    }
    static byte[] vCmdBytes = new byte[2];
    /// <summary>
    /// 阅读信息
    /// </summary>
@@ -249,16 +249,28 @@
                vPackBytes = new byte[vBodyLeng];
                Array.Copy(fixBytes, vReadIndex + 6, vPackBytes, 0, vBodyLeng); // 提取包的字节内容
                                                                                // 完整的包则读包
                vNetpack = PackageRegedit.TransPack(vPackBytes);
                if (vNetpack != null)
                {
                    if (DebugEx.EnableNetLog)
                    {
                        DebugEx.NetLogFormat("收包:{0}", vNetpack.GetType().Name);
                    }
                    GameNetSystem.Instance.PushPackage(vNetpack);
                vPackBytes = GameNetEncode.BaseXorSub(vPackBytes);
                Array.Copy(vPackBytes, 0, vCmdBytes, 0, 2);
                var cmd = (ushort)((ushort)(vCmdBytes[0] << 8) + vCmdBytes[1]);
                if (PackageRegedit.Contain(cmd))
                {
                    vNetpack = PackageRegedit.TransPack(cmd, vPackBytes);
                    if (vNetpack != null)
                    {
                        if (DebugEx.EnableNetLog)
                        {
                            DebugEx.NetLogFormat("收包:{0}", vNetpack.GetType().Name);
                        }
                        GameNetSystem.Instance.PushPackage(vNetpack);
                    }
                }
                else
                {
                    CSharpCallLua.OnRecieveLuaNetPackage(cmd, vPackBytes);
                }
                vReadIndex += 6 + vBodyLeng;
            }
        }