干掉,客户端发送和产生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; mRemoteForwardCount = (int)ServerForwardCount;
mNetReplayQueue.Enqueue(inputData); mNetReplayQueue.Enqueue(inputData);
#if UNITY_EDITOR #if UNITY_EDITOR
Debug.Log($"InData=>{inputData.FrameStartID} QCount = >{mNetReplayQueue.Count}"); //Debug.Log($"InData=>{inputData.FrameStartID} QCount = >{mNetReplayQueue.Count}");
#endif #endif
mRemoteFrameIdx = inputData.FrameStartID; mRemoteFrameIdx = inputData.FrameStartID;
if (!bNetInit) if (!bNetInit)

View File

@ -1,5 +1,6 @@
using AxibugEmuOnline.Client.Network; using AxibugEmuOnline.Client.Network;
using Google.Protobuf; using Google.Protobuf;
using HaoYueNet.ClientNetwork;
using System; using System;
namespace AxibugEmuOnline.Client.Common namespace AxibugEmuOnline.Client.Common
@ -7,6 +8,18 @@ namespace AxibugEmuOnline.Client.Common
public static class ProtoBufHelper public static class ProtoBufHelper
{ {
private static ProtobufferMsgPool _msgPool = new ProtobufferMsgPool(); 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) public static byte[] Serizlize(IMessage msg)
{ {
return msg.ToByteArray(); return msg.ToByteArray();

View File

@ -76,7 +76,7 @@ namespace AxibugEmuOnline.Client
if (IsNetPlay) //skip frame handle if (IsNetPlay) //skip frame handle
{ {
var skipFrameCount = App.roomMgr.netReplay.GetSkipFrameCount(); 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++) for (var i = 0; i < skipFrameCount; i++)
{ {
if (!TryPushEmulatorFrame()) break; if (!TryPushEmulatorFrame()) break;

View File

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

View File

@ -11,7 +11,7 @@ namespace AxibugEmuOnline.Client.Manager
public class AppLogin public class AppLogin
{ {
static string LastLoginGuid = ""; static string LastLoginGuid = "";
static Protobuf_Login _Protobuf_Login = new Protobuf_Login();
public AppLogin() public AppLogin()
{ {
NetMsg.Instance.RegNetMsgEvent<Protobuf_Login_RESP>((int)CommandID.CmdLogin, RecvLoginMsg); NetMsg.Instance.RegNetMsgEvent<Protobuf_Login_RESP>((int)CommandID.CmdLogin, RecvLoginMsg);
@ -57,18 +57,15 @@ namespace AxibugEmuOnline.Client.Manager
break; break;
} }
Protobuf_Login msg = new Protobuf_Login() _Protobuf_Login.LoginType = LoginType.UseDevice;
{ _Protobuf_Login.DeviceStr = Initer.dev_UUID;
LoginType = LoginType.UseDevice, _Protobuf_Login.DeviceType = devType;
DeviceStr = Initer.dev_UUID,
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) public void RecvLoginMsg(Protobuf_Login_RESP msg)
{ {
if (msg.Status == LoginResultStatus.Ok) if (msg.Status == LoginResultStatus.Ok)
{ {
App.log.Info("登录成功"); 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_Player_Ready _Protobuf_Room_Player_Ready = new Protobuf_Room_Player_Ready();
Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData(); Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData();
Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame(); 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() public AppRoom()
{ {
NetMsg.Instance.RegNetMsgEvent<Protobuf_Room_List_RESP>((int)CommandID.CmdRoomList, RecvGetRoomList); NetMsg.Instance.RegNetMsgEvent<Protobuf_Room_List_RESP>((int)CommandID.CmdRoomList, RecvGetRoomList);
@ -146,7 +147,7 @@ namespace AxibugEmuOnline.Client.Manager
public void SendGetRoomList() public void SendGetRoomList()
{ {
App.log.Info("拉取房间列表"); App.log.Info("拉取房间列表");
App.network.SendToServer((int)CommandID.CmdRoomList, ProtoBufHelper.Serizlize(_Protobuf_Room_List)); App.network.SendToServer((int)CommandID.CmdRoomList, _Protobuf_Room_List);
} }
/// <summary> /// <summary>
@ -195,7 +196,7 @@ namespace AxibugEmuOnline.Client.Manager
{ {
_Protobuf_Room_Get_Screen.RoomID = RoomID; _Protobuf_Room_Get_Screen.RoomID = RoomID;
App.log.Info($"获取房间画面快照"); 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> /// <summary>
/// 获取单个房间画面 /// 获取单个房间画面
@ -220,7 +221,7 @@ namespace AxibugEmuOnline.Client.Manager
_Protobuf_Room_Create.GameRomID = GameRomID; _Protobuf_Room_Create.GameRomID = GameRomID;
_Protobuf_Room_Create.GameRomHash = GameRomHash; _Protobuf_Room_Create.GameRomHash = GameRomHash;
App.log.Info($"创建房间"); App.log.Info($"创建房间");
App.network.SendToServer((int)CommandID.CmdRoomCreate, ProtoBufHelper.Serizlize(_Protobuf_Room_Create)); App.network.SendToServer((int)CommandID.CmdRoomCreate, _Protobuf_Room_Create);
} }
/// <summary> /// <summary>
@ -247,7 +248,7 @@ namespace AxibugEmuOnline.Client.Manager
{ {
_Protobuf_Room_Join.RoomID = RoomID; _Protobuf_Room_Join.RoomID = RoomID;
App.log.Info($"加入房间"); App.log.Info($"加入房间");
App.network.SendToServer((int)CommandID.CmdRoomJoin, ProtoBufHelper.Serizlize(_Protobuf_Room_Join)); App.network.SendToServer((int)CommandID.CmdRoomJoin, _Protobuf_Room_Join);
} }
/// <summary> /// <summary>
@ -275,7 +276,7 @@ namespace AxibugEmuOnline.Client.Manager
return; return;
_Protobuf_Room_Leave.RoomID = mineRoomMiniInfo.RoomID; _Protobuf_Room_Leave.RoomID = mineRoomMiniInfo.RoomID;
App.log.Info($"LeavnRoom"); 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> /// <summary>
@ -438,7 +439,7 @@ namespace AxibugEmuOnline.Client.Manager
} }
App.log.Info($"SendChangePlaySlotIdxWithJoyIdx"); 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> /// <summary>
/// 上报即时存档 /// 上报即时存档
@ -448,12 +449,10 @@ namespace AxibugEmuOnline.Client.Manager
{ {
//压缩 //压缩
byte[] compressRawData = Helper.CompressByteArray(RawData); byte[] compressRawData = Helper.CompressByteArray(RawData);
Protobuf_Room_HostPlayer_UpdateStateRaw msg = new Protobuf_Room_HostPlayer_UpdateStateRaw() _Protobuf_Room_HostPlayer_UpdateStateRaw.LoadStateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData);
{
LoadStateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData)
};
App.log.Info($"上报即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}"); 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) 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.LoadStateNeedTimeUs = LoadStateNeedTimeUs;
_Protobuf_Room_Player_Ready.VideoFrameShowNeedTimeUs = VideoFrameShowNeedTimeUs; _Protobuf_Room_Player_Ready.VideoFrameShowNeedTimeUs = VideoFrameShowNeedTimeUs;
_Protobuf_Room_Player_Ready.AudioFramePlayNeedTimeUs = AudioFramePlayNeedTimeUs; _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> /// <summary>
@ -501,7 +500,7 @@ namespace AxibugEmuOnline.Client.Manager
{ {
_Protobuf_Room_SinglePlayerInputData.FrameID = FrameID; _Protobuf_Room_SinglePlayerInputData.FrameID = FrameID;
_Protobuf_Room_SinglePlayerInputData.InputData = InputData; _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; ulong TestAllData = 0;
@ -521,7 +520,8 @@ namespace AxibugEmuOnline.Client.Manager
byte[] comData = Helper.CompressByteArray(RenderBuffer); byte[] comData = Helper.CompressByteArray(RenderBuffer);
_Protobuf_Screnn_Frame.FrameID = 0; _Protobuf_Screnn_Frame.FrameID = 0;
_Protobuf_Screnn_Frame.RawBitmap = ByteString.CopyFrom(comData); _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) public void OnScreen(Protobuf_Screnn_Frame msg)

View File

@ -9,6 +9,8 @@ namespace AxibugEmuOnline.Client.Manager
{ {
public class AppShare 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() public AppShare()
{ {
NetMsg.Instance.RegNetMsgEvent<Protobuf_Game_Mark_RESP>((int)CommandID.CmdGameMark, RecvGameStar); 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> /// <param name="Motion">[0]取消收藏[1]收藏</param>
public void SendGameStar(int RomID, int Motion) public void SendGameStar(int RomID, int Motion)
{ {
Protobuf_Game_Mark req = new Protobuf_Game_Mark() _Protobuf_Game_Mark.Motion = Motion;
{ _Protobuf_Game_Mark.RomID = RomID;
Motion = Motion,
RomID = RomID,
};
App.log.Info($"SendGameStar"); App.log.Info($"SendGameStar");
App.network.SendToServer((int)CommandID.CmdGameMark, ProtoBufHelper.Serizlize(req)); App.network.SendToServer((int)CommandID.CmdGameMark, _Protobuf_Game_Mark);
} }
/// <summary> /// <summary>
@ -50,16 +49,14 @@ namespace AxibugEmuOnline.Client.Manager
//压缩 //压缩
byte[] compressImgData = Helper.CompressByteArray(SavImgData); byte[] compressImgData = Helper.CompressByteArray(SavImgData);
Protobuf_GameScreen_Img_Upload req = new Protobuf_GameScreen_Img_Upload() _Protobuf_GameScreen_Img_Upload.RomID = RomID;
{ _Protobuf_GameScreen_Img_Upload.SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData);
RomID = RomID,
SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData),
};
App.log.Info($"SendUpLoadGameScreenCover"); App.log.Info($"SendUpLoadGameScreenCover");
App.log.Info($"上传截图 原数据大小:{SavImgData.Length},压缩后;{compressImgData.Length}"); 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) 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 delegate void OnUploadedSavDataHandle(int romID, int slotIndex, Protobuf_Mine_GameSavInfo savInfo);
public event OnUploadedSavDataHandle OnUploadedSavData; 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() public SavCloudApi()
{ {
NetMsg.Instance.RegNetMsgEvent<Protobuf_Mine_GetGameSavList_RESP>((int)CommandID.CmdGamesavGetGameSavList, RecvGetGameSavList); NetMsg.Instance.RegNetMsgEvent<Protobuf_Mine_GetGameSavList_RESP>((int)CommandID.CmdGamesavGetGameSavList, RecvGetGameSavList);
@ -33,13 +37,9 @@ namespace AxibugEmuOnline.Client
public void SendGetGameSavList(int RomID) public void SendGetGameSavList(int RomID)
{ {
if (m_fetchingRomIDs.Contains(RomID)) return; if (m_fetchingRomIDs.Contains(RomID)) return;
_Protobuf_Mine_GetGameSavList.RomID = RomID;
Protobuf_Mine_GetGameSavList req = new Protobuf_Mine_GetGameSavList()
{
RomID = RomID,
};
App.log.Info($"SendGetGameSavList"); 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) void RecvGetGameSavList(Protobuf_Mine_GetGameSavList_RESP msg)
@ -62,13 +62,10 @@ namespace AxibugEmuOnline.Client
/// <param name="SavDataIdx"></param> /// <param name="SavDataIdx"></param>
public void SendDelGameSavList(int RomID, int SavDataIdx) public void SendDelGameSavList(int RomID, int SavDataIdx)
{ {
Protobuf_Mine_DelGameSav req = new Protobuf_Mine_DelGameSav() _Protobuf_Mine_DelGameSav.RomID = RomID;
{ _Protobuf_Mine_DelGameSav.SavDataIdx = SavDataIdx;
RomID = RomID,
SavDataIdx = SavDataIdx
};
App.log.Info($"SendDelGameSavList"); 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) void RecvDelGameSavList(Protobuf_Mine_DelGameSav_RESP msg)
@ -89,20 +86,18 @@ namespace AxibugEmuOnline.Client
//压缩 //压缩
byte[] compressImgData = Helper.CompressByteArray(SavImgData); byte[] compressImgData = Helper.CompressByteArray(SavImgData);
Protobuf_Mine_UpLoadGameSav req = new Protobuf_Mine_UpLoadGameSav() _Protobuf_Mine_UpLoadGameSav.RomID = RomID;
{ _Protobuf_Mine_UpLoadGameSav.SavDataIdx = SavDataIdx;
RomID = RomID, _Protobuf_Mine_UpLoadGameSav.StateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData);
SavDataIdx = SavDataIdx, _Protobuf_Mine_UpLoadGameSav.SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData);
StateRaw = Google.Protobuf.ByteString.CopyFrom(compressRawData), _Protobuf_Mine_UpLoadGameSav.Sequence = (int)sequence;
SavImg = Google.Protobuf.ByteString.CopyFrom(compressImgData),
Sequence = (int)sequence
};
App.log.Info($"SendDelGameSavList"); App.log.Info($"SendDelGameSavList");
App.log.Info($"上传即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}"); App.log.Info($"上传即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}");
App.log.Info($"上传截图 原数据大小:{SavImgData.Length},压缩后;{compressImgData.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) 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; public string Token => userdata.IsLoggedIn ? userdata.Token : string.Empty;
Dictionary<long, UserDataBase> DictUID2User = new Dictionary<long, UserDataBase>(); Dictionary<long, UserDataBase> DictUID2User = new Dictionary<long, UserDataBase>();
public int OnlinePlayerCount => DictUID2User.Count; 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) public void InitMainUserData(string UName, long UID, string token)
{ {
userdata.NickName = UName; userdata.NickName = UName;
@ -147,10 +151,7 @@ namespace AxibugEmuOnline.Client.Manager
/// </summary> /// </summary>
public void Send_GetUserList() public void Send_GetUserList()
{ {
Protobuf_UserList msg = new Protobuf_UserList() App.network.SendToServer((int)CommandID.CmdUserOnlinelist, _Protobuf_UserList);
{
};
App.network.SendToServer((int)CommandID.CmdUserOnlinelist, ProtoBufHelper.Serizlize(msg));
} }
public void RecvUserOnlinelist(Protobuf_UserList_RESP msg) public void RecvUserOnlinelist(Protobuf_UserList_RESP msg)
@ -179,18 +180,14 @@ namespace AxibugEmuOnline.Client.Manager
{ {
RemoveUser(msg.UID); RemoveUser(msg.UID);
} }
/// <summary> /// <summary>
/// 发送修改昵称请求 /// 发送修改昵称请求
/// </summary> /// </summary>
/// <param name="NickName"></param> /// <param name="NickName"></param>
public void Send_ModifyNickName(string NickName) public void Send_ModifyNickName(string NickName)
{ {
Protobuf_Modify_NickName msg = new Protobuf_Modify_NickName() _Protobuf_Modify_NickName.NickName = NickName;
{ App.network.SendToServer((int)CommandID.CmdModifyNickName, _Protobuf_Modify_NickName);
NickName = NickName
};
App.network.SendToServer((int)CommandID.CmdModifyNickName, ProtoBufHelper.Serizlize(msg));
} }
void RecvModifyNickName(Protobuf_Modify_NickName_RESP msg) void RecvModifyNickName(Protobuf_Modify_NickName_RESP msg)
@ -212,6 +209,5 @@ namespace AxibugEmuOnline.Client.Manager
App.roomMgr.ChangeCurrRoomPlayerName(msg.UID); App.roomMgr.ChangeCurrRoomPlayerName(msg.UID);
Eventer.Instance.PostEvent(EEvent.OnOtherUserInfoUpdate, msg.UID); Eventer.Instance.PostEvent(EEvent.OnOtherUserInfoUpdate, msg.UID);
} }
} }
} }

View File

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

View File

@ -3,7 +3,6 @@ using AxibugProtobuf;
using Google.Protobuf; using Google.Protobuf;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using AxibugEmuOnline.Client.Common; using AxibugEmuOnline.Client.Common;
namespace AxibugEmuOnline.Client.Network namespace AxibugEmuOnline.Client.Network
@ -189,6 +188,10 @@ namespace AxibugEmuOnline.Client.Network
App.log.Error("错误:" + errMsg); 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) if (err > ErrorCode.ErrorOk)
return; return;

View File

@ -1,6 +1,8 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Common;
using AxibugEmuOnline.Client.Event; using AxibugEmuOnline.Client.Event;
using AxibugProtobuf; using AxibugProtobuf;
using Google.Protobuf;
using HaoYueNet.ClientNetwork; using HaoYueNet.ClientNetwork;
using System; using System;
using System.Net.Sockets; using System.Net.Sockets;
@ -88,7 +90,6 @@ namespace AxibugEmuOnline.Client.Network
/// <param name="data">业务数据</param> /// <param name="data">业务数据</param>
void GetDataCallBack(int CMDID, int ERRCODE, byte[] data) void GetDataCallBack(int CMDID, int ERRCODE, byte[] data)
{ {
//NetworkDeBugLog("收到消息 CMDID =>" + CMDID + " ERRCODE =>" + ERRCODE + " 数据长度=>" + data.Length);
try try
{ {
//抛出网络数据 //抛出网络数据
@ -164,5 +165,37 @@ namespace AxibugEmuOnline.Client.Network
return false; return false;
return socket.Connected; 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);
}
} }
} }