干掉,客户端发送和产生Protobuff以及序列化时的byte[]分配,使用Byte[]池化租用和复用

This commit is contained in:
sin365 2025-11-06 15:09:10 +08:00
parent 148684f8aa
commit a4b39f36bb
12 changed files with 115 additions and 88 deletions

View File

@ -55,7 +55,7 @@ namespace AxiReplay
mRemoteForwardCount = (int)ServerForwardCount;
mNetReplayQueue.Enqueue(inputData);
#if UNITY_EDITOR
Debug.Log($"InData=>{inputData.FrameStartID} QCount = >{mNetReplayQueue.Count}");
//Debug.Log($"InData=>{inputData.FrameStartID} QCount = >{mNetReplayQueue.Count}");
#endif
mRemoteFrameIdx = inputData.FrameStartID;
if (!bNetInit)

View File

@ -1,5 +1,6 @@
using AxibugEmuOnline.Client.Network;
using Google.Protobuf;
using HaoYueNet.ClientNetwork;
using System;
namespace AxibugEmuOnline.Client.Common
@ -7,6 +8,18 @@ namespace AxibugEmuOnline.Client.Common
public static class ProtoBufHelper
{
private static ProtobufferMsgPool _msgPool = new ProtobufferMsgPool();
public static void RentSerizlizeData(IMessage msg, out byte[] data, out int usedlength)
{
usedlength = msg.CalculateSize();
data = BytesArrayPool.RentBuffer(usedlength);
msg.WriteTo(data.AsSpan(0, usedlength));
}
public static void ReturnSerizlizeData(byte[] data)
{
BytesArrayPool.ReturnBuffer(data);
}
public static byte[] Serizlize(IMessage msg)
{
return msg.ToByteArray();

View File

@ -76,7 +76,7 @@ namespace AxibugEmuOnline.Client
if (IsNetPlay) //skip frame handle
{
var skipFrameCount = App.roomMgr.netReplay.GetSkipFrameCount();
if (skipFrameCount > 0) App.log.Debug($"SKIP FRAME : {skipFrameCount} ,CF:{App.roomMgr.netReplay.mCurrClientFrameIdx},RFIdx:{App.roomMgr.netReplay.mRemoteFrameIdx},RForward:{App.roomMgr.netReplay.mRemoteForwardCount} ,queue:{App.roomMgr.netReplay.mNetReplayQueue.Count}");
//if (skipFrameCount > 0) App.log.Debug($"SKIP FRAME : {skipFrameCount} ,CF:{App.roomMgr.netReplay.mCurrClientFrameIdx},RFIdx:{App.roomMgr.netReplay.mRemoteFrameIdx},RForward:{App.roomMgr.netReplay.mRemoteForwardCount} ,queue:{App.roomMgr.netReplay.mNetReplayQueue.Count}");
for (var i = 0; i < skipFrameCount; i++)
{
if (!TryPushEmulatorFrame()) break;

View File

@ -8,6 +8,7 @@ namespace AxibugEmuOnline.Client.Manager
{
public class AppChat
{
Protobuf_ChatMsg _Protobuf_ChatMsg = new Protobuf_ChatMsg();
public AppChat()
{
NetMsg.Instance.RegNetMsgEvent<Protobuf_ChatMsg_RESP>((int)CommandID.CmdChatmsg, RecvChatMsg);
@ -15,11 +16,8 @@ namespace AxibugEmuOnline.Client.Manager
public void SendChatMsg(string ChatMsg)
{
Protobuf_ChatMsg msg = new Protobuf_ChatMsg()
{
ChatMsg = ChatMsg,
};
App.network.SendToServer((int)CommandID.CmdChatmsg, ProtoBufHelper.Serizlize(msg));
_Protobuf_ChatMsg.ChatMsg = ChatMsg;
App.network.SendToServer((int)CommandID.CmdChatmsg, _Protobuf_ChatMsg);
}
public void RecvChatMsg(Protobuf_ChatMsg_RESP msg)

View File

@ -11,7 +11,7 @@ namespace AxibugEmuOnline.Client.Manager
public class AppLogin
{
static string LastLoginGuid = "";
static Protobuf_Login _Protobuf_Login = new Protobuf_Login();
public AppLogin()
{
NetMsg.Instance.RegNetMsgEvent<Protobuf_Login_RESP>((int)CommandID.CmdLogin, RecvLoginMsg);
@ -57,18 +57,15 @@ namespace AxibugEmuOnline.Client.Manager
break;
}
Protobuf_Login msg = new Protobuf_Login()
{
LoginType = LoginType.UseDevice,
DeviceStr = Initer.dev_UUID,
DeviceType = devType,
};
_Protobuf_Login.LoginType = LoginType.UseDevice;
_Protobuf_Login.DeviceStr = Initer.dev_UUID;
_Protobuf_Login.DeviceType = devType;
App.network.SendToServer((int)CommandID.CmdLogin, ProtoBufHelper.Serizlize(msg));
App.network.SendToServer((int)CommandID.CmdLogin, _Protobuf_Login);
}
public void RecvLoginMsg(Protobuf_Login_RESP msg)
{
{
if (msg.Status == LoginResultStatus.Ok)
{
App.log.Info("登录成功");

View File

@ -39,6 +39,7 @@ namespace AxibugEmuOnline.Client.Manager
Protobuf_Room_Player_Ready _Protobuf_Room_Player_Ready = new Protobuf_Room_Player_Ready();
Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData();
Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame();
Protobuf_Room_HostPlayer_UpdateStateRaw _Protobuf_Room_HostPlayer_UpdateStateRaw = new Protobuf_Room_HostPlayer_UpdateStateRaw();
public AppRoom()
{
NetMsg.Instance.RegNetMsgEvent<Protobuf_Room_List_RESP>((int)CommandID.CmdRoomList, RecvGetRoomList);
@ -146,7 +147,7 @@ namespace AxibugEmuOnline.Client.Manager
public void SendGetRoomList()
{
App.log.Info("拉取房间列表");
App.network.SendToServer((int)CommandID.CmdRoomList, ProtoBufHelper.Serizlize(_Protobuf_Room_List));
App.network.SendToServer((int)CommandID.CmdRoomList, _Protobuf_Room_List);
}
/// <summary>
@ -195,7 +196,7 @@ namespace AxibugEmuOnline.Client.Manager
{
_Protobuf_Room_Get_Screen.RoomID = RoomID;
App.log.Info($"获取房间画面快照");
App.network.SendToServer((int)CommandID.CmdRoomGetScreen, ProtoBufHelper.Serizlize(_Protobuf_Room_Get_Screen));
App.network.SendToServer((int)CommandID.CmdRoomGetScreen, _Protobuf_Room_Get_Screen);
}
/// <summary>
/// 获取单个房间画面
@ -220,7 +221,7 @@ namespace AxibugEmuOnline.Client.Manager
_Protobuf_Room_Create.GameRomID = GameRomID;
_Protobuf_Room_Create.GameRomHash = GameRomHash;
App.log.Info($"创建房间");
App.network.SendToServer((int)CommandID.CmdRoomCreate, ProtoBufHelper.Serizlize(_Protobuf_Room_Create));
App.network.SendToServer((int)CommandID.CmdRoomCreate, _Protobuf_Room_Create);
}
/// <summary>
@ -247,7 +248,7 @@ namespace AxibugEmuOnline.Client.Manager
{
_Protobuf_Room_Join.RoomID = RoomID;
App.log.Info($"加入房间");
App.network.SendToServer((int)CommandID.CmdRoomJoin, ProtoBufHelper.Serizlize(_Protobuf_Room_Join));
App.network.SendToServer((int)CommandID.CmdRoomJoin, _Protobuf_Room_Join);
}
/// <summary>
@ -275,7 +276,7 @@ namespace AxibugEmuOnline.Client.Manager
return;
_Protobuf_Room_Leave.RoomID = mineRoomMiniInfo.RoomID;
App.log.Info($"LeavnRoom");
App.network.SendToServer((int)CommandID.CmdRoomLeave, ProtoBufHelper.Serizlize(_Protobuf_Room_Leave));
App.network.SendToServer((int)CommandID.CmdRoomLeave, _Protobuf_Room_Leave);
}
/// <summary>
@ -438,7 +439,7 @@ namespace AxibugEmuOnline.Client.Manager
}
App.log.Info($"SendChangePlaySlotIdxWithJoyIdx");
App.network.SendToServer((int)CommandID.CmdRoomChangePlayerWithJoy, ProtoBufHelper.Serizlize(_Protobuf_Room_Change_PlaySlotWithJoy));
App.network.SendToServer((int)CommandID.CmdRoomChangePlayerWithJoy, _Protobuf_Room_Change_PlaySlotWithJoy);
}
/// <summary>
/// 上报即时存档
@ -448,12 +449,10 @@ namespace AxibugEmuOnline.Client.Manager
{
//压缩
byte[] compressRawData = Helper.CompressByteArray(RawData);
Protobuf_Room_HostPlayer_UpdateStateRaw msg = new Protobuf_Room_HostPlayer_UpdateStateRaw()
{
LoadStateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData)
};
_Protobuf_Room_HostPlayer_UpdateStateRaw.LoadStateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData);
App.log.Info($"上报即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}");
App.network.SendToServer((int)CommandID.CmdRoomHostPlayerUpdateStateRaw, ProtoBufHelper.Serizlize(msg));
App.network.SendToServer((int)CommandID.CmdRoomHostPlayerUpdateStateRaw, _Protobuf_Room_HostPlayer_UpdateStateRaw);
_Protobuf_Room_HostPlayer_UpdateStateRaw.Reset();
}
void RecvRoom_WaitStep(Protobuf_Room_WaitStep_RESP msg)
@ -491,7 +490,7 @@ namespace AxibugEmuOnline.Client.Manager
_Protobuf_Room_Player_Ready.LoadStateNeedTimeUs = LoadStateNeedTimeUs;
_Protobuf_Room_Player_Ready.VideoFrameShowNeedTimeUs = VideoFrameShowNeedTimeUs;
_Protobuf_Room_Player_Ready.AudioFramePlayNeedTimeUs = AudioFramePlayNeedTimeUs;
App.network.SendToServer((int)CommandID.CmdRoomPlayerReady, ProtoBufHelper.Serizlize(_Protobuf_Room_Player_Ready));
App.network.SendToServer((int)CommandID.CmdRoomPlayerReady, _Protobuf_Room_Player_Ready);
}
/// <summary>
@ -501,7 +500,7 @@ namespace AxibugEmuOnline.Client.Manager
{
_Protobuf_Room_SinglePlayerInputData.FrameID = FrameID;
_Protobuf_Room_SinglePlayerInputData.InputData = InputData;
App.network.SendToServer((int)CommandID.CmdRoomSingelPlayerInput, ProtoBufHelper.Serizlize(_Protobuf_Room_SinglePlayerInputData));
App.network.SendToServer((int)CommandID.CmdRoomSingelPlayerInput, _Protobuf_Room_SinglePlayerInputData);
}
ulong TestAllData = 0;
@ -521,7 +520,8 @@ namespace AxibugEmuOnline.Client.Manager
byte[] comData = Helper.CompressByteArray(RenderBuffer);
_Protobuf_Screnn_Frame.FrameID = 0;
_Protobuf_Screnn_Frame.RawBitmap = ByteString.CopyFrom(comData);
App.network.SendToServer((int)CommandID.CmdScreen, ProtoBufHelper.Serizlize(_Protobuf_Screnn_Frame));
App.network.SendToServer((int)CommandID.CmdScreen, _Protobuf_Screnn_Frame);
_Protobuf_Screnn_Frame.Reset();
}
public void OnScreen(Protobuf_Screnn_Frame msg)

View File

@ -9,6 +9,8 @@ namespace AxibugEmuOnline.Client.Manager
{
public class AppShare
{
static Protobuf_Game_Mark _Protobuf_Game_Mark = new Protobuf_Game_Mark();
static Protobuf_GameScreen_Img_Upload _Protobuf_GameScreen_Img_Upload = new Protobuf_GameScreen_Img_Upload();
public AppShare()
{
NetMsg.Instance.RegNetMsgEvent<Protobuf_Game_Mark_RESP>((int)CommandID.CmdGameMark, RecvGameStar);
@ -22,13 +24,10 @@ namespace AxibugEmuOnline.Client.Manager
/// <param name="Motion">[0]取消收藏[1]收藏</param>
public void SendGameStar(int RomID, int Motion)
{
Protobuf_Game_Mark req = new Protobuf_Game_Mark()
{
Motion = Motion,
RomID = RomID,
};
_Protobuf_Game_Mark.Motion = Motion;
_Protobuf_Game_Mark.RomID = RomID;
App.log.Info($"SendGameStar");
App.network.SendToServer((int)CommandID.CmdGameMark, ProtoBufHelper.Serizlize(req));
App.network.SendToServer((int)CommandID.CmdGameMark, _Protobuf_Game_Mark);
}
/// <summary>
@ -50,16 +49,14 @@ namespace AxibugEmuOnline.Client.Manager
//压缩
byte[] compressImgData = Helper.CompressByteArray(SavImgData);
Protobuf_GameScreen_Img_Upload req = new Protobuf_GameScreen_Img_Upload()
{
RomID = RomID,
SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData),
};
_Protobuf_GameScreen_Img_Upload.RomID = RomID;
_Protobuf_GameScreen_Img_Upload.SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData);
App.log.Info($"SendUpLoadGameScreenCover");
App.log.Info($"上传截图 原数据大小:{SavImgData.Length},压缩后;{compressImgData.Length}");
App.network.SendToServer((int)CommandID.CmdGamescreenImgUpload, ProtoBufHelper.Serizlize(req));
App.network.SendToServer((int)CommandID.CmdGamescreenImgUpload, _Protobuf_GameScreen_Img_Upload);
_Protobuf_GameScreen_Img_Upload.Reset();
}
private void RecvGamescreenImgUpload(Protobuf_GameScreen_Img_Upload_RESP msg)

View File

@ -18,6 +18,10 @@ namespace AxibugEmuOnline.Client
public delegate void OnUploadedSavDataHandle(int romID, int slotIndex, Protobuf_Mine_GameSavInfo savInfo);
public event OnUploadedSavDataHandle OnUploadedSavData;
static Protobuf_Mine_DelGameSav _Protobuf_Mine_DelGameSav = new Protobuf_Mine_DelGameSav();
static Protobuf_Mine_UpLoadGameSav _Protobuf_Mine_UpLoadGameSav = new Protobuf_Mine_UpLoadGameSav();
static Protobuf_Mine_GetGameSavList _Protobuf_Mine_GetGameSavList = new Protobuf_Mine_GetGameSavList();
public SavCloudApi()
{
NetMsg.Instance.RegNetMsgEvent<Protobuf_Mine_GetGameSavList_RESP>((int)CommandID.CmdGamesavGetGameSavList, RecvGetGameSavList);
@ -33,13 +37,9 @@ namespace AxibugEmuOnline.Client
public void SendGetGameSavList(int RomID)
{
if (m_fetchingRomIDs.Contains(RomID)) return;
Protobuf_Mine_GetGameSavList req = new Protobuf_Mine_GetGameSavList()
{
RomID = RomID,
};
_Protobuf_Mine_GetGameSavList.RomID = RomID;
App.log.Info($"SendGetGameSavList");
App.network.SendToServer((int)CommandID.CmdGamesavGetGameSavList, ProtoBufHelper.Serizlize(req));
App.network.SendToServer((int)CommandID.CmdGamesavGetGameSavList, _Protobuf_Mine_GetGameSavList);
}
void RecvGetGameSavList(Protobuf_Mine_GetGameSavList_RESP msg)
@ -62,13 +62,10 @@ namespace AxibugEmuOnline.Client
/// <param name="SavDataIdx"></param>
public void SendDelGameSavList(int RomID, int SavDataIdx)
{
Protobuf_Mine_DelGameSav req = new Protobuf_Mine_DelGameSav()
{
RomID = RomID,
SavDataIdx = SavDataIdx
};
_Protobuf_Mine_DelGameSav.RomID = RomID;
_Protobuf_Mine_DelGameSav.SavDataIdx = SavDataIdx;
App.log.Info($"SendDelGameSavList");
App.network.SendToServer((int)CommandID.CmdGamesavDelGameSav, ProtoBufHelper.Serizlize(req));
App.network.SendToServer((int)CommandID.CmdGamesavDelGameSav, _Protobuf_Mine_DelGameSav);
}
void RecvDelGameSavList(Protobuf_Mine_DelGameSav_RESP msg)
@ -89,20 +86,18 @@ namespace AxibugEmuOnline.Client
//压缩
byte[] compressImgData = Helper.CompressByteArray(SavImgData);
Protobuf_Mine_UpLoadGameSav req = new Protobuf_Mine_UpLoadGameSav()
{
RomID = RomID,
SavDataIdx = SavDataIdx,
StateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData),
SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData),
Sequence = (int)sequence
};
_Protobuf_Mine_UpLoadGameSav.RomID = RomID;
_Protobuf_Mine_UpLoadGameSav.SavDataIdx = SavDataIdx;
_Protobuf_Mine_UpLoadGameSav.StateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData);
_Protobuf_Mine_UpLoadGameSav.SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData);
_Protobuf_Mine_UpLoadGameSav.Sequence = (int)sequence;
App.log.Info($"SendDelGameSavList");
App.log.Info($"上传即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}");
App.log.Info($"上传截图 原数据大小:{SavImgData.Length},压缩后;{compressImgData.Length}");
App.network.SendToServer((int)CommandID.CmdGamesavUploadGameSav, ProtoBufHelper.Serizlize(req));
App.network.SendToServer((int)CommandID.CmdGamesavUploadGameSav, _Protobuf_Mine_UpLoadGameSav);
_Protobuf_Mine_UpLoadGameSav.Reset();
}
void RecvUpLoadGameSav(Protobuf_Mine_UpLoadGameSav_RESP msg)

View File

@ -43,6 +43,10 @@ namespace AxibugEmuOnline.Client.Manager
public string Token => userdata.IsLoggedIn ? userdata.Token : string.Empty;
Dictionary<long, UserDataBase> DictUID2User = new Dictionary<long, UserDataBase>();
public int OnlinePlayerCount => DictUID2User.Count;
static Protobuf_UserList _Protobuf_UserList = new Protobuf_UserList();
static Protobuf_Modify_NickName _Protobuf_Modify_NickName = new Protobuf_Modify_NickName();
public void InitMainUserData(string UName, long UID, string token)
{
userdata.NickName = UName;
@ -147,10 +151,7 @@ namespace AxibugEmuOnline.Client.Manager
/// </summary>
public void Send_GetUserList()
{
Protobuf_UserList msg = new Protobuf_UserList()
{
};
App.network.SendToServer((int)CommandID.CmdUserOnlinelist, ProtoBufHelper.Serizlize(msg));
App.network.SendToServer((int)CommandID.CmdUserOnlinelist, _Protobuf_UserList);
}
public void RecvUserOnlinelist(Protobuf_UserList_RESP msg)
@ -179,18 +180,14 @@ namespace AxibugEmuOnline.Client.Manager
{
RemoveUser(msg.UID);
}
/// <summary>
/// 发送修改昵称请求
/// </summary>
/// <param name="NickName"></param>
public void Send_ModifyNickName(string NickName)
{
Protobuf_Modify_NickName msg = new Protobuf_Modify_NickName()
{
NickName = NickName
};
App.network.SendToServer((int)CommandID.CmdModifyNickName, ProtoBufHelper.Serizlize(msg));
_Protobuf_Modify_NickName.NickName = NickName;
App.network.SendToServer((int)CommandID.CmdModifyNickName, _Protobuf_Modify_NickName);
}
void RecvModifyNickName(Protobuf_Modify_NickName_RESP msg)
@ -212,6 +209,5 @@ namespace AxibugEmuOnline.Client.Manager
App.roomMgr.ChangeCurrRoomPlayerName(msg.UID);
Eventer.Instance.PostEvent(EEvent.OnOtherUserInfoUpdate, msg.UID);
}
}
}

View File

@ -24,6 +24,9 @@ namespace AxibugEmuOnline.Client
public double MaxNetDelay;
public List<double> NetDelays = new List<double>();
public const int NetAveDelayCount = 3;
static Protobuf_Ping _Protobuf_Ping = new Protobuf_Ping();
static Protobuf_Pong _Protobuf_Pong = new Protobuf_Pong();
private void Awake()
{
NetMsg.Instance.RegNetMsgEvent<Protobuf_Ping>((int)CommandID.CmdPing, OnCmdPing);
@ -89,22 +92,14 @@ namespace AxibugEmuOnline.Client
int randSeed = new System.Random().Next(0, int.MaxValue);
LastPingSeed = randSeed;
LastStartPingTime = App.tick.sw.Elapsed;
Protobuf_Ping resp = new Protobuf_Ping()
{
Seed = randSeed,
};
App.network.SendToServer((int)CommandID.CmdPing, ProtoBufHelper.Serizlize(resp));
_Protobuf_Ping.Seed = randSeed;
App.network.SendToServer((int)CommandID.CmdPing, _Protobuf_Ping);
}
public void OnCmdPing(Protobuf_Ping msg)
{
//App.log.Debug($"OnCmdPing");
Protobuf_Pong resp = new Protobuf_Pong()
{
Seed = msg.Seed,
};
App.network.SendToServer((int)CommandID.CmdPong, ProtoBufHelper.Serizlize(resp));
_Protobuf_Pong.Seed = msg.Seed;
App.network.SendToServer((int)CommandID.CmdPong, _Protobuf_Pong);
}
public void OnCmdPong(Protobuf_Pong msg)

View File

@ -3,7 +3,6 @@ using AxibugProtobuf;
using Google.Protobuf;
using System;
using System.Collections.Generic;
using System.Linq;
using AxibugEmuOnline.Client.Common;
namespace AxibugEmuOnline.Client.Network
@ -189,6 +188,10 @@ namespace AxibugEmuOnline.Client.Network
App.log.Error("错误:" + errMsg);
}
#if UNITY_EDITOR
//if (cmd > (int)CommandID.CmdPong)
//App.log.Info("[NET]<color=yellow>" + cmd + "|" + (CommandID)cmd + "| ERRCODE:" + ERRCODE + "| length:" + arg.Length + "</color>");
#endif
if (err > ErrorCode.ErrorOk)
return;

View File

@ -1,6 +1,8 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Common;
using AxibugEmuOnline.Client.Event;
using AxibugProtobuf;
using Google.Protobuf;
using HaoYueNet.ClientNetwork;
using System;
using System.Net.Sockets;
@ -88,7 +90,6 @@ namespace AxibugEmuOnline.Client.Network
/// <param name="data">业务数据</param>
void GetDataCallBack(int CMDID, int ERRCODE, byte[] data)
{
//NetworkDeBugLog("收到消息 CMDID =>" + CMDID + " ERRCODE =>" + ERRCODE + " 数据长度=>" + data.Length);
try
{
//抛出网络数据
@ -164,5 +165,37 @@ namespace AxibugEmuOnline.Client.Network
return false;
return socket.Connected;
}
public void SendToServer(int CmdID, IMessage msg)
{
//SendToServer(CmdID, ProtoBufHelper.Serizlize(msg));
//return;
// byte[] data2 = ProtoBufHelper.Serizlize(msg);
// base.SendToServerWithLength(CmdID, ref data2, data2.Length);
//#if UNITY_EDITOR
// if (CmdID > (int)CommandID.CmdPong)
// NetworkDeBugLog("[NET]<color=cyan>" + CmdID + "|" + (CommandID)CmdID + "| alllen:" + data2.Length + " usedlength:" + data2 + "</color>");
//#endif
// return;
ProtoBufHelper.RentSerizlizeData(msg, out byte[] data, out int usedlength);
base.SendToServerWithLength(CmdID, ref data, usedlength);
#if UNITY_EDITOR
//if (CmdID > (int)CommandID.CmdPong)
//NetworkDeBugLog("[NET]<color=cyan>" + CmdID + "|" + (CommandID)CmdID + "| alllen:"+ data.Length + " usedlength:" + usedlength + "</color>");
#endif
ProtoBufHelper.ReturnSerizlizeData(data);
}
public new void SendToServer(int CmdID, byte[] data)
{
#if UNITY_EDITOR
//if(CmdID > (int)CommandID.CmdPong)
//NetworkDeBugLog("[NET]<color=cyan>" + CmdID + "|" + (CommandID)CmdID + "| length:" + data.Length + "</color>");
#endif
base.SendToServer(CmdID, data);
}
}
}