4340 【前端】支持xlua方便IOS提审 修改网络封包系统,如果封包没有在C#注册,那么抛给lua
| | |
| | | }
|
| | | }
|
| | |
|
| | | 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 = "";
|
| | |
| | | }
|
| | | #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);// 解析内容
|
| | |
| | | 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;
|
| | | }
|
| | |
| | | public class ClientSocketController
|
| | | {
|
| | | Socket m_Socket;
|
| | | public Socket socket
|
| | | {
|
| | | public Socket socket {
|
| | | get { return m_Socket; }
|
| | | }
|
| | |
|
| | |
| | |
|
| | | }
|
| | |
|
| | | static byte[] vCmdBytes = new byte[2];
|
| | | /// <summary>
|
| | | /// 阅读信息
|
| | | /// </summary>
|
| | |
| | | vPackBytes = new byte[vBodyLeng];
|
| | | Array.Copy(fixBytes, vReadIndex + 6, vPackBytes, 0, vBodyLeng); // 提取包的字节内容
|
| | | // 完整的包则读包
|
| | | vNetpack = PackageRegedit.TransPack(vPackBytes);
|
| | |
|
| | | 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)
|
| | |
| | |
|
| | | GameNetSystem.Instance.PushPackage(vNetpack);
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | CSharpCallLua.OnRecieveLuaNetPackage(cmd, vPackBytes);
|
| | | }
|
| | |
|
| | | vReadIndex += 6 + vBodyLeng;
|
| | | }
|
| | | }
|