From a4caf1d3ad6a8a2ead567c967bd8883d134476b9 Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Fri, 13 Sep 2024 10:07:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Eping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AxibugEmuOnline.Client/Assets/Script/App.cs | 49 +- .../Assets/Script/Manager/AppLogin.cs | 5 + .../Assets/Script/Manager/AppNetGame.cs | 45 -- .../Assets/Script/Manager/AppRoom.cs | 83 +++- .../Assets/Script/Manager/CacheManager.cs | 2 +- .../Assets/Script/Manager/HttpAPI.cs | 15 +- .../Assets/Script/Manager/RomLib/RomFile.cs | 2 +- .../Assets/Script/MonoCom.meta | 8 + .../Assets/Script/MonoCom/TickLoop.cs | 111 +++++ .../TickLoop.cs.meta} | 2 +- .../Assets/Script/Network/NetMsg.cs | 18 +- .../Assets/Script/Network/NetworkHelper.cs | 60 ++- .../Protobuf/ProtobufAxibugEmuOnline.cs | 424 +++++++++++++----- 13 files changed, 621 insertions(+), 203 deletions(-) delete mode 100644 AxibugEmuOnline.Client/Assets/Script/Manager/AppNetGame.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/MonoCom.meta create mode 100644 AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs rename AxibugEmuOnline.Client/Assets/Script/{Manager/AppNetGame.cs.meta => MonoCom/TickLoop.cs.meta} (83%) diff --git a/AxibugEmuOnline.Client/Assets/Script/App.cs b/AxibugEmuOnline.Client/Assets/Script/App.cs index 15dc5cd..ba7b056 100644 --- a/AxibugEmuOnline.Client/Assets/Script/App.cs +++ b/AxibugEmuOnline.Client/Assets/Script/App.cs @@ -1,8 +1,10 @@ using AxibugEmuOnline.Client.Manager; using AxibugEmuOnline.Client.Network; -using System; using System.Collections; +using System.Threading.Tasks; using UnityEngine; +using UnityEngine.Networking; +using static AxibugEmuOnline.Client.HttpAPI; namespace AxibugEmuOnline.Client.ClientCore { @@ -24,7 +26,11 @@ namespace AxibugEmuOnline.Client.ClientCore public static AppSceneLoader SceneLoader; public static AppRoom roomMgr; + #region Mono + public static TickLoop tickLoop; private static CoroutineRunner coRunner; + #endregion + public static string PersistentDataPath => Application.persistentDataPath; @@ -47,9 +53,11 @@ namespace AxibugEmuOnline.Client.ClientCore var go = new GameObject("[AppAxibugEmuOnline]"); GameObject.DontDestroyOnLoad(go); + tickLoop = go.AddComponent(); coRunner = go.AddComponent(); StartCoroutine(AppTickFlow()); + RePullNetInfo(); } private static IEnumerator AppTickFlow() @@ -61,6 +69,37 @@ namespace AxibugEmuOnline.Client.ClientCore } } + public static void RePullNetInfo() + { + StartCoroutine(StartNetInit()); + } + + static IEnumerator StartNetInit() + { + if (App.network.isConnected) + yield break; + + int platform = 0; + + UnityWebRequest request = UnityWebRequest.Get($"{App.httpAPI.WebSiteApi}/CheckStandInfo?platform={platform}&version={Application.version}"); + yield return request.SendWebRequest(); + + if (request.result != UnityWebRequest.Result.Success) + yield break; + + App.log.Debug($"ApiResp => {request.downloadHandler.text}"); + Resp_CheckStandInfo resp = JsonUtility.FromJson(request.downloadHandler.text); + //需要更新 + if (resp.needUpdateClient == 1) + { + //TODO + } + + yield return null; + Connect("127.0.0.1", 10492); + //Connect(resp.serverIp, resp.serverPort); + } + private static void Tick() { nesRomLib.ExecuteFetchRomInfo(); @@ -76,9 +115,13 @@ namespace AxibugEmuOnline.Client.ClientCore coRunner.StopCoroutine(cor); } - public static bool Connect(string IP, int port) + public static void Connect(string IP, int port) { - return network.Init(IP, port); + Task task = new Task(() => + { + network.Init(IP, port); + }); + task.Start(); } public static void Close() diff --git a/AxibugEmuOnline.Client/Assets/Script/Manager/AppLogin.cs b/AxibugEmuOnline.Client/Assets/Script/Manager/AppLogin.cs index 1bb2164..6d8d523 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Manager/AppLogin.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Manager/AppLogin.cs @@ -3,12 +3,16 @@ using AxibugEmuOnline.Client.Common; using AxibugEmuOnline.Client.Network; using AxibugProtobuf; using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; namespace AxibugEmuOnline.Client.Manager { public class AppLogin { static string LastLoginGuid = ""; + public AppLogin() { NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdLogin, RecvLoginMsg); @@ -42,5 +46,6 @@ namespace AxibugEmuOnline.Client.Manager App.log.Info("登录失败"); } } + } } diff --git a/AxibugEmuOnline.Client/Assets/Script/Manager/AppNetGame.cs b/AxibugEmuOnline.Client/Assets/Script/Manager/AppNetGame.cs deleted file mode 100644 index f3c9579..0000000 --- a/AxibugEmuOnline.Client/Assets/Script/Manager/AppNetGame.cs +++ /dev/null @@ -1,45 +0,0 @@ -using AxibugEmuOnline.Client.ClientCore; -using AxibugEmuOnline.Client.Common; -using AxibugEmuOnline.Client.Network; -using AxibugProtobuf; -using Google.Protobuf; -using System.Linq; - -namespace AxibugEmuOnline.Client.Manager -{ - public class AppNetGame - { - int CurrRoomID; - int[] _palette; - public int[] _renderbuffer { private set; get; } - public AppNetGame() - { - NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdScreen, OnScreen); - } - - Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame(); - - public void SendScreen(byte[] RenderBuffer) - { - 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)); - } - - public void OnScreen(byte[] reqData) - { - Protobuf_Screnn_Frame msg = ProtoBufHelper.DeSerizlize(reqData); - lock (_renderbuffer) - { - byte[] data = Helper.DecompressByteArray(msg.RawBitmap.ToArray()); - for (int i = 0; i < data.Length; i++) - { - _renderbuffer[i] = _palette[data[i]]; - } - } - } - - - } -} diff --git a/AxibugEmuOnline.Client/Assets/Script/Manager/AppRoom.cs b/AxibugEmuOnline.Client/Assets/Script/Manager/AppRoom.cs index 4448971..3bd7e7e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Manager/AppRoom.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Manager/AppRoom.cs @@ -6,6 +6,7 @@ using AxibugProtobuf; using AxiReplay; using Google.Protobuf; using System.Collections.Generic; +using System.Linq; using UnityEngine; namespace AxibugEmuOnline.Client.Manager @@ -21,14 +22,21 @@ namespace AxibugEmuOnline.Client.Manager public byte[] RawData { get; private set; } = null; public NetReplay netReplay { get; private set; } - Dictionary dictRoomListID2Info = new Dictionary(); - static Protobuf_Room_List _Protobuf_Room_List = new Protobuf_Room_List(); - static Protobuf_Room_Create _Protobuf_Room_Create = new Protobuf_Room_Create(); - static Protobuf_Room_Join _Protobuf_Room_Join = new Protobuf_Room_Join(); - static Protobuf_Room_Leave _Protobuf_Room_Leave = new Protobuf_Room_Leave(); - static Protobuf_Room_Player_Ready _Protobuf_Room_Player_Ready = new Protobuf_Room_Player_Ready(); - static Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData(); + + struct S_PlayerMiniInfo + { + public long UID; + public string NickName; + } + + Protobuf_Room_List _Protobuf_Room_List = new Protobuf_Room_List(); + Protobuf_Room_Create _Protobuf_Room_Create = new Protobuf_Room_Create(); + Protobuf_Room_Join _Protobuf_Room_Join = new Protobuf_Room_Join(); + Protobuf_Room_Leave _Protobuf_Room_Leave = new Protobuf_Room_Leave(); + 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(); public AppRoom() { NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomList, RecvGetRoomList); @@ -40,6 +48,7 @@ namespace AxibugEmuOnline.Client.Manager NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomWaitStep, RecvRoom_WaitStep); NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomHostPlayerUpdateStateRaw, RecvHostPlayer_UpdateStateRaw); NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomSynPlayerInput, RecvHostSyn_RoomFrameAllInputData); + NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdScreen, OnScreen); } #region 房间列表管理 @@ -90,7 +99,7 @@ namespace AxibugEmuOnline.Client.Manager } public void ReleaseRePlay() { - + } #endregion @@ -107,17 +116,47 @@ namespace AxibugEmuOnline.Client.Manager return -1; } - long[] GetRoom4Player() + long[] GetRoom4PlayerUIDs() { if (mineRoomMiniInfo == null) return null; long[] result = new long[4]; - if (mineRoomMiniInfo.Player1UID > 0) result[0] = mineRoomMiniInfo.Player1UID; - if (mineRoomMiniInfo.Player2UID == App.user.userdata.UID) + if (mineRoomMiniInfo.Player2UID > 0) result[1] = mineRoomMiniInfo.Player2UID; + if (mineRoomMiniInfo.Player3UID > 0) + result[2] = mineRoomMiniInfo.Player3UID; + if (mineRoomMiniInfo.Player4UID > 0) + result[3] = mineRoomMiniInfo.Player4UID; + return result; + } + S_PlayerMiniInfo[] GetRoom4PlayerMiniInfos() + { + if (mineRoomMiniInfo == null) + return null; + S_PlayerMiniInfo[] result = new S_PlayerMiniInfo[4]; + if (mineRoomMiniInfo.Player1UID > 0) + { + result[0].UID = mineRoomMiniInfo.Player1UID; + result[0].NickName = mineRoomMiniInfo.Player1NickName; + } + if (mineRoomMiniInfo.Player2UID > 0) + { + result[1].UID = mineRoomMiniInfo.Player2UID; + result[1].NickName = mineRoomMiniInfo.Player2NickName; + } + if (mineRoomMiniInfo.Player3UID > 0) + { + result[2].UID = mineRoomMiniInfo.Player3UID; + result[2].NickName = mineRoomMiniInfo.Player3NickName; + } + if (mineRoomMiniInfo.Player4UID > 0) + { + result[3].UID = mineRoomMiniInfo.Player4UID; + result[3].NickName = mineRoomMiniInfo.Player4NickName; + } return result; } @@ -238,9 +277,9 @@ namespace AxibugEmuOnline.Client.Manager void RecvRoomMyRoomStateChange(byte[] reqData) { Protobuf_Room_MyRoom_State_Change msg = ProtoBufHelper.DeSerizlize(reqData); - long[] oldRoomPlayer = GetRoom4Player(); + long[] oldRoomPlayer = GetRoom4PlayerUIDs(); mineRoomMiniInfo = msg.RoomMiniInfo; - long[] newRoomPlayer = GetRoom4Player(); + long[] newRoomPlayer = GetRoom4PlayerUIDs(); for (int i = 0; i < 4; i++) { long OldPlayer = oldRoomPlayer[i]; @@ -309,7 +348,7 @@ namespace AxibugEmuOnline.Client.Manager /// /// 同步上行 /// - public void SendRoomSingelPlayerInput(uint FrameID,uint InputData) + public void SendRoomSingelPlayerInput(uint FrameID, uint InputData) { _Protobuf_Room_SinglePlayerInputData.FrameID = FrameID; _Protobuf_Room_SinglePlayerInputData.InputData = InputData; @@ -322,5 +361,21 @@ namespace AxibugEmuOnline.Client.Manager Protobuf_Room_Syn_RoomFrameAllInputData msg = ProtoBufHelper.DeSerizlize(reqData); netReplay.InData(new ReplayStep() { FrameStartID = (int)msg.FrameID, InPut = msg.InputData }); } + + public void SendScreen(byte[] RenderBuffer) + { + //压缩 + 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)); + } + + public void OnScreen(byte[] reqData) + { + Protobuf_Screnn_Frame msg = ProtoBufHelper.DeSerizlize(reqData); + //解压 + byte[] data = Helper.DecompressByteArray(msg.RawBitmap.ToArray()); + } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/Manager/CacheManager.cs b/AxibugEmuOnline.Client/Assets/Script/Manager/CacheManager.cs index eadb183..b481454 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Manager/CacheManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Manager/CacheManager.cs @@ -27,7 +27,7 @@ namespace AxibugEmuOnline.Client IEnumerator DownloadFromURL(string url, string path, Action callback) { - var request = UnityWebRequest.Get($"{App.httpAPI.DownSite}/{url}"); + var request = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{url}"); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) diff --git a/AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs b/AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs index b35d6e4..284211d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs @@ -9,8 +9,8 @@ namespace AxibugEmuOnline.Client { public class HttpAPI { - public string WebSite = "http://emu.axibug.com/api"; - public string DownSite = "http://emu.axibug.com"; + public string WebHost = "http://emu.axibug.com"; + public string WebSiteApi => WebHost + "/api"; public delegate void GetRomListAPI(Action callback, int page, int pageSize = 10); @@ -21,7 +21,7 @@ namespace AxibugEmuOnline.Client private IEnumerator GetNesRomListFlow(int page, int pageSize, Action callback) { - UnityWebRequest request = UnityWebRequest.Get($"{WebSite}/NesRomList?Page={page}&PageSize={pageSize}"); + UnityWebRequest request = UnityWebRequest.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}"); yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) @@ -78,5 +78,14 @@ namespace AxibugEmuOnline.Client public string hash; public int stars; } + [Serializable] + public class Resp_CheckStandInfo + { + public int needUpdateClient; + public string serverIp; + public ushort serverPort; + public string clientVersion; + public string downLoadUrl; + } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/Manager/RomLib/RomFile.cs b/AxibugEmuOnline.Client/Assets/Script/Manager/RomLib/RomFile.cs index 61f870e..bde787d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Manager/RomLib/RomFile.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Manager/RomLib/RomFile.cs @@ -106,7 +106,7 @@ namespace AxibugEmuOnline.Client private IEnumerator DownloadRemoteRom(Action callback) { - downloadRequest = UnityWebRequest.Get($"{App.httpAPI.DownSite}/{webData.url}"); + downloadRequest = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{webData.url}"); yield return downloadRequest.SendWebRequest(); if (downloadRequest.result != UnityWebRequest.Result.Success) diff --git a/AxibugEmuOnline.Client/Assets/Script/MonoCom.meta b/AxibugEmuOnline.Client/Assets/Script/MonoCom.meta new file mode 100644 index 0000000..e5a10ee --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/MonoCom.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d210d2c6168ca99488844ef0372050ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs b/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs new file mode 100644 index 0000000..3a3ebe1 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs @@ -0,0 +1,111 @@ +using AxibugEmuOnline.Client.ClientCore; +using AxibugEmuOnline.Client.Common; +using AxibugEmuOnline.Client.Network; +using AxibugProtobuf; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Net.Sockets; +using UnityEngine; + +namespace AxibugEmuOnline.Client +{ + public class TickLoop : MonoBehaviour + { + Action LoopAction; + public Stopwatch sw = Stopwatch.StartNew(); + public TimeSpan LastStartPingTime; + public int LastPingSeed; + public double AveNetDelay; + public double MinNetDelay; + public double MaxNetDelay; + public List NetDelays = new List(); + public const int NetAveDelayCount = 3; + private void Awake() + { + Application.targetFrameRate = 60; + + NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdPing, OnCmdPing); + NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdPong, OnCmdPong); + } + float LastPingTime; + private void Update() + { + NetMsg.Instance.DequeueNesMsg(); + LoopAction?.Invoke(); + + if (Time.time - LastPingTime > 3) + { + LastPingTime = Time.time; + Ping(); + } + } + + void OnApplicationQuit() + { + App.log.Debug("OnApplicationQuit"); + App.network.bAutoReConnect = false; + if (App.network.isConnected) + { + App.network.CloseConntect(); + } + App.network.CancelReConnect(); + } + + + void Ping() + { + if (!App.network.isConnected) + return; + + int randSeed = new System.Random().Next(0, int.MaxValue); + LastPingSeed = randSeed; + LastStartPingTime = App.tickLoop.sw.Elapsed; + Protobuf_Ping resp = new Protobuf_Ping() + { + Seed = randSeed, + }; + App.network.SendToServer((int)CommandID.CmdPing, ProtoBufHelper.Serizlize(resp)); + } + + + public void OnCmdPing(byte[] reqData) + { + App.log.Debug($"OnCmdPing"); + Protobuf_Ping msg = ProtoBufHelper.DeSerizlize(reqData); + Protobuf_Pong resp = new Protobuf_Pong() + { + Seed = msg.Seed, + }; + App.network.SendToServer((int)CommandID.CmdPong, ProtoBufHelper.Serizlize(resp)); + } + + public void OnCmdPong(byte[] reqData) + { + App.log.Debug($"OnCmdPong"); + Protobuf_Pong msg = ProtoBufHelper.DeSerizlize(reqData); + + if (LastPingSeed == msg.Seed) + { + TimeSpan current = App.tickLoop.sw.Elapsed; + TimeSpan delta = current - LastStartPingTime; + NetDelays.Add(delta.TotalSeconds); + + while (NetDelays.Count > NetAveDelayCount) + NetDelays.RemoveAt(0); + + double tempMin = double.MaxValue; + double tempMax = double.MinValue; + for (int i = 0; i < NetDelays.Count; i++) + { + tempMin = Math.Min(NetDelays[i], tempMin); + tempMax = Math.Max(NetDelays[i], tempMax); + } + MinNetDelay = tempMin; + MaxNetDelay = tempMax; + AveNetDelay = NetDelays.Average(w => w); + } + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/Manager/AppNetGame.cs.meta b/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs.meta similarity index 83% rename from AxibugEmuOnline.Client/Assets/Script/Manager/AppNetGame.cs.meta rename to AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs.meta index 22078bd..5af3fb8 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Manager/AppNetGame.cs.meta +++ b/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5f7ca4d4fcf6c0f41a6ead44beed31dd +guid: 07b53eddba336d74dab08a8a037b0e73 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/AxibugEmuOnline.Client/Assets/Script/Network/NetMsg.cs b/AxibugEmuOnline.Client/Assets/Script/Network/NetMsg.cs index 42bd87c..96660b5 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Network/NetMsg.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Network/NetMsg.cs @@ -12,6 +12,8 @@ namespace AxibugEmuOnline.Client.Network private Dictionary> netEventDic = new Dictionary>(128); + private Queue<(int, int, byte[])> queueNetMsg = new Queue<(int, int, byte[])>(); + private NetMsg() { } @@ -57,7 +59,21 @@ namespace AxibugEmuOnline.Client.Network #endregion #region PostEvent - public void PostNetMsgEvent(int cmd, byte[] arg) + public void EnqueueNesMsg(int cmd, int ERRCODE, byte[] arg) + { + queueNetMsg.Enqueue((cmd, ERRCODE, arg)); + } + + public void DequeueNesMsg() + { + if (queueNetMsg.Count > 0) + { + (int, int, byte[]) msgData = queueNetMsg.Dequeue(); + PostNetMsgEvent(msgData.Item1, msgData.Item2, msgData.Item3); + } + } + + public void PostNetMsgEvent(int cmd, int ERRCODE, byte[] arg) { List eventList = GetNetEventDicList(cmd); if (eventList != null) diff --git a/AxibugEmuOnline.Client/Assets/Script/Network/NetworkHelper.cs b/AxibugEmuOnline.Client/Assets/Script/Network/NetworkHelper.cs index 7fc1b80..56c7ac7 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Network/NetworkHelper.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Network/NetworkHelper.cs @@ -1,8 +1,10 @@ using AxibugEmuOnline.Client.ClientCore; +using AxibugProtobuf; using HaoYueNet.ClientNetworkNet.Standard2; using System; using System.Net.Sockets; using System.Threading; +using System.Threading.Tasks; namespace AxibugEmuOnline.Client.Network { @@ -31,7 +33,7 @@ namespace AxibugEmuOnline.Client.Network /// /// 是否自动重连 /// - public bool bAutoReConnect = false; + public bool bAutoReConnect = true; /// /// 重连尝试时间 /// @@ -80,7 +82,12 @@ namespace AxibugEmuOnline.Client.Network try { //抛出网络数据 - NetMsg.Instance.PostNetMsgEvent(CMDID, data); + + //网络线程直接抛 + if(CMDID == (int)CommandID.CmdPing || CMDID == (int)CommandID.CmdPong) + NetMsg.Instance.PostNetMsgEvent(CMDID,ERRCODE, data); + else//加入队列,主线程来取 + NetMsg.Instance.EnqueueNesMsg(CMDID, ERRCODE, data); } catch (Exception ex) { @@ -102,33 +109,44 @@ namespace AxibugEmuOnline.Client.Network ReConnect(); } - - bool bInReConnecting = false; + CancellationTokenSource cts; + Task ReConnectTask; + public void CancelReConnect() + { + App.log.Debug("CancelReConnect"); + cts?.Cancel(); + cts = null; + ReConnectTask = null; + } /// /// 自动重连 /// void ReConnect() { - if (bInReConnecting) + if (ReConnectTask != null) return; - bInReConnecting = true; - - bool bflagDone = false; - do + cts = new CancellationTokenSource(); + ReConnectTask = new Task(() => { - //等待时间 - Thread.Sleep(ReConnectTryTime); - App.log.Info($"尝试自动重连{LastConnectIP}:{LastConnectPort}……"); - //第一步 - if (Init(LastConnectIP, LastConnectPort)) + bool bflagDone = false; + do { - App.log.Info($"自动重连成功!"); - bflagDone = true; - App.log.Info($"触发重连后的自动逻辑!"); - OnReConnected?.Invoke(); - } - } while (!bflagDone); - bInReConnecting = false; + //等待时间 + Thread.Sleep(ReConnectTryTime); + App.log.Info($"尝试自动重连{LastConnectIP}:{LastConnectPort}……"); + //第一步 + if (Init(LastConnectIP, LastConnectPort)) + { + App.log.Info($"自动重连成功!"); + bflagDone = true; + App.log.Info($"触发重连后的自动逻辑!"); + OnReConnected?.Invoke(); + } + } while (!bflagDone); + ReConnectTask = null; + cts = null; + }, cts.Token); + ReConnectTask.Start(); } bool CheckIsConnectd() diff --git a/AxibugEmuOnline.Client/Assets/Script/Protobuf/ProtobufAxibugEmuOnline.cs b/AxibugEmuOnline.Client/Assets/Script/Protobuf/ProtobufAxibugEmuOnline.cs index 777de64..9d51316 100644 --- a/AxibugEmuOnline.Client/Assets/Script/Protobuf/ProtobufAxibugEmuOnline.cs +++ b/AxibugEmuOnline.Client/Assets/Script/Protobuf/ProtobufAxibugEmuOnline.cs @@ -38,56 +38,59 @@ namespace AxibugProtobuf { "b3RvYnVmLkxvZ2luUmVzdWx0U3RhdHVzEgsKA1VJRBgGIAEoAyIUChJQcm90", "b2J1Zl9Sb29tX0xpc3QiWwoXUHJvdG9idWZfUm9vbV9MaXN0X1JFU1ASQAoQ", "Um9vbU1pbmlJbmZvTGlzdBgBIAMoCzImLkF4aWJ1Z1Byb3RvYnVmLlByb3Rv", - "YnVmX1Jvb21fTWluaUluZm8ijQIKFlByb3RvYnVmX1Jvb21fTWluaUluZm8S", + "YnVmX1Jvb21fTWluaUluZm8ihgMKFlByb3RvYnVmX1Jvb21fTWluaUluZm8S", "DgoGUm9vbUlEGAEgASgFEhEKCUdhbWVSb21JRBgCIAEoBRITCgtHYW1lUm9t", - "SGFzaBgDIAEoCRIwCglHYW1lU3RhdGUYBSABKA4yHS5BeGlidWdQcm90b2J1", - "Zi5Sb29tR2FtZVN0YXRlEhUKDUhvc3RQbGF5ZXJVSUQYBiABKAUSFAoMT2Jz", - "VXNlckNvdW50GAcgASgFEhMKC1BsYXllcjFfVUlEGAggASgDEhgKEFBsYXll", - "cjFfTmlja05hbWUYCSABKAkSEwoLUGxheWVyMl9VSUQYCiABKAMSGAoQUGxh", - "eWVyMl9OaWNrTmFtZRgLIAEoCSJtChlQcm90b2J1Zl9Sb29tX1VwZGF0ZV9S", - "RVNQEhIKClVwZGF0ZVR5cGUYASABKAUSPAoMUm9vbU1pbmlJbmZvGAIgASgL", - "MiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9vbV9NaW5pSW5mbyJLChVQ", - "cm90b2J1Zl9TY3Jlbm5fRnJhbWUSDgoGUm9vbUlEGAEgASgFEg8KB0ZyYW1l", - "SUQYAiABKAUSEQoJUmF3Qml0bWFwGAMgASgMIkkKI1Byb3RvYnVmX1Jvb21f", - "U2luZ2xlUGxheWVySW5wdXREYXRhEg8KB0ZyYW1lSUQYASABKA0SEQoJSW5w", - "dXREYXRhGAIgASgNIk0KJ1Byb3RvYnVmX1Jvb21fU3luX1Jvb21GcmFtZUFs", - "bElucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgNEhEKCUlucHV0RGF0YRgCIAEo", - "BCJVChRQcm90b2J1Zl9Sb29tX0NyZWF0ZRIRCglHYW1lUm9tSUQYASABKAUS", - "EwoLR2FtZVJvbUhhc2gYAiABKAkSFQoNSm9pblBsYXllcklkeBgDIAEoBSJZ", - "ChlQcm90b2J1Zl9Sb29tX0NyZWF0ZV9SRVNQEjwKDFJvb21NaW5pSW5mbxgB", - "IAEoCzImLkF4aWJ1Z1Byb3RvYnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8i", - "NwoSUHJvdG9idWZfUm9vbV9Kb2luEg4KBlJvb21JRBgBIAEoBRIRCglQbGF5", - "ZXJOdW0YAiABKAUiVwoXUHJvdG9idWZfUm9vbV9Kb2luX1JFU1ASPAoMUm9v", - "bU1pbmlJbmZvGAEgASgLMiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9v", - "bV9NaW5pSW5mbyIlChNQcm90b2J1Zl9Sb29tX0xlYXZlEg4KBlJvb21JRBgB", - "IAEoBSIqChhQcm90b2J1Zl9Sb29tX0xlYXZlX1JFU1ASDgoGUm9vbUlEGAEg", - "ASgFImEKIVByb3RvYnVmX1Jvb21fTXlSb29tX1N0YXRlX0NoYW5nZRI8CgxS", - "b29tTWluaUluZm8YASABKAsyJi5BeGlidWdQcm90b2J1Zi5Qcm90b2J1Zl9S", - "b29tX01pbmlJbmZvIkUKG1Byb3RvYnVmX1Jvb21fV2FpdFN0ZXBfUkVTUBIQ", - "CghXYWl0U3RlcBgBIAEoBRIUCgxMb2FkU3RhdGVSYXcYAiABKAwiPwonUHJv", - "dG9idWZfUm9vbV9Ib3N0UGxheWVyX1VwZGF0ZVN0YXRlUmF3EhQKDExvYWRT", - "dGF0ZVJhdxgBIAEoDCIuCixQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBk", - "YXRlU3RhdGVSYXdfUkVTUCIcChpQcm90b2J1Zl9Sb29tX1BsYXllcl9SZWFk", - "eSqaAwoJQ29tbWFuZElEEg4KCkNNRF9ERUZBVUwQABIMCghDTURfUElORxAB", - "EgwKCENNRF9QT05HEAISDgoJQ01EX0xPR0lOENEPEhAKC0NNRF9DSEFUTVNH", - "EKEfEhIKDUNNRF9Sb29tX0xpc3QQiScSGQoUQ01EX1Jvb21fTGlzdF9VcGRh", - "dGUQiicSFAoPQ01EX1Jvb21fQ3JlYXRlEO0nEhIKDUNNRF9Sb29tX0pvaW4Q", - "8ScSEwoOQ01EX1Jvb21fTGVhdmUQ8icSIgodQ01EX1Jvb21fTXlSb29tX1N0", - "YXRlX0NoYW5nZWQQ9icSFgoRQ01EX1Jvb21fV2FpdFN0ZXAQ0SgSJwoiQ01E", - "X1Jvb21fSG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhdxDUKBIaChVDTURfUm9v", - "bV9QbGF5ZXJfUmVhZHkQ2CgSIAobQ01EX1Jvb21fU2luZ2VsX1BsYXllcklu", - "cHV0EPouEh0KGENNRF9ST09NX1NZTl9QbGF5ZXJJbnB1dBD/LhIPCgpDTURf", - "U2NyZWVuENk2Ko8BCglFcnJvckNvZGUSEAoMRVJST1JfREVGQVVMEAASDAoI", - "RVJST1JfT0sQARIYChRFUlJPUl9ST09NX05PVF9GT1VORBAKEiUKIUVSUk9S", - "X1JPT01fU0xPVF9SRUFETFlfSEFEX1BMQVlFUhALEiEKHUVSUk9SX1JPT01f", - "Q0FOVF9ET19DVVJSX1NUQVRFEDIqHAoJTG9naW5UeXBlEg8KC0Jhc2VEZWZh", - "dWx0EAAqSwoKRGV2aWNlVHlwZRIWChJEZXZpY2VUeXBlX0RlZmF1bHQQABIG", - "CgJQQxABEgsKB0FuZHJvaWQQAhIHCgNJT1MQAxIHCgNQU1YQBCpwCg1Sb29t", - "R2FtZVN0YXRlEhIKDk5vbmVfR2FtZVN0YXRlEAASDAoIT25seUhvc3QQARIR", - "Cg1XYWl0UmF3VXBkYXRlEAISDQoJV2FpdFJlYWR5EAMSCQoFUGF1c2UQBBIQ", - "CgxJbk9ubGluZUdhbWUQBSpOChFMb2dpblJlc3VsdFN0YXR1cxIhCh1Mb2dp", - "blJlc3VsdFN0YXR1c19CYXNlRGVmYXVsdBAAEgYKAk9LEAESDgoKQWNjb3Vu", - "dEVychACQgJIAWIGcHJvdG8z")); + "SGFzaBgDIAEoCRIVCg1Ib3N0UGxheWVyVUlEGAQgASgDEjAKCUdhbWVTdGF0", + "ZRgFIAEoDjIdLkF4aWJ1Z1Byb3RvYnVmLlJvb21HYW1lU3RhdGUSFAoMT2Jz", + "VXNlckNvdW50GAYgASgFEhMKC1BsYXllcjFfVUlEGAcgASgDEhgKEFBsYXll", + "cjFfTmlja05hbWUYCCABKAkSEwoLUGxheWVyMl9VSUQYCSABKAMSGAoQUGxh", + "eWVyMl9OaWNrTmFtZRgKIAEoCRITCgtQbGF5ZXIzX1VJRBgLIAEoAxIYChBQ", + "bGF5ZXIzX05pY2tOYW1lGAwgASgJEhMKC1BsYXllcjRfVUlEGA0gASgDEhgK", + "EFBsYXllcjRfTmlja05hbWUYDiABKAkSGQoRU2NyZWVuUHJvdmlkZXJVSUQY", + "DyABKAMibQoZUHJvdG9idWZfUm9vbV9VcGRhdGVfUkVTUBISCgpVcGRhdGVU", + "eXBlGAEgASgFEjwKDFJvb21NaW5pSW5mbxgCIAEoCzImLkF4aWJ1Z1Byb3Rv", + "YnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iSwoVUHJvdG9idWZfU2NyZW5u", + "X0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIPCgdGcmFtZUlEGAIgASgFEhEKCVJh", + "d0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1Zl9Sb29tX1NpbmdsZVBsYXllcklu", + "cHV0RGF0YRIPCgdGcmFtZUlEGAEgASgNEhEKCUlucHV0RGF0YRgCIAEoDSJN", + "CidQcm90b2J1Zl9Sb29tX1N5bl9Sb29tRnJhbWVBbGxJbnB1dERhdGESDwoH", + "RnJhbWVJRBgBIAEoDRIRCglJbnB1dERhdGEYAiABKAQiVQoUUHJvdG9idWZf", + "Um9vbV9DcmVhdGUSEQoJR2FtZVJvbUlEGAEgASgFEhMKC0dhbWVSb21IYXNo", + "GAIgASgJEhUKDUpvaW5QbGF5ZXJJZHgYAyABKAUiWQoZUHJvdG9idWZfUm9v", + "bV9DcmVhdGVfUkVTUBI8CgxSb29tTWluaUluZm8YASABKAsyJi5BeGlidWdQ", + "cm90b2J1Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIjcKElByb3RvYnVmX1Jv", + "b21fSm9pbhIOCgZSb29tSUQYASABKAUSEQoJUGxheWVyTnVtGAIgASgFIlcK", + "F1Byb3RvYnVmX1Jvb21fSm9pbl9SRVNQEjwKDFJvb21NaW5pSW5mbxgBIAEo", + "CzImLkF4aWJ1Z1Byb3RvYnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iJQoT", + "UHJvdG9idWZfUm9vbV9MZWF2ZRIOCgZSb29tSUQYASABKAUiKgoYUHJvdG9i", + "dWZfUm9vbV9MZWF2ZV9SRVNQEg4KBlJvb21JRBgBIAEoBSJhCiFQcm90b2J1", + "Zl9Sb29tX015Um9vbV9TdGF0ZV9DaGFuZ2USPAoMUm9vbU1pbmlJbmZvGAEg", + "ASgLMiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9vbV9NaW5pSW5mbyJF", + "ChtQcm90b2J1Zl9Sb29tX1dhaXRTdGVwX1JFU1ASEAoIV2FpdFN0ZXAYASAB", + "KAUSFAoMTG9hZFN0YXRlUmF3GAIgASgMIj8KJ1Byb3RvYnVmX1Jvb21fSG9z", + "dFBsYXllcl9VcGRhdGVTdGF0ZVJhdxIUCgxMb2FkU3RhdGVSYXcYASABKAwi", + "LgosUHJvdG9idWZfUm9vbV9Ib3N0UGxheWVyX1VwZGF0ZVN0YXRlUmF3X1JF", + "U1AiHAoaUHJvdG9idWZfUm9vbV9QbGF5ZXJfUmVhZHkqmgMKCUNvbW1hbmRJ", + "RBIOCgpDTURfREVGQVVMEAASDAoIQ01EX1BJTkcQARIMCghDTURfUE9ORxAC", + "Eg4KCUNNRF9MT0dJThDRDxIQCgtDTURfQ0hBVE1TRxChHxISCg1DTURfUm9v", + "bV9MaXN0EIknEhkKFENNRF9Sb29tX0xpc3RfVXBkYXRlEIonEhQKD0NNRF9S", + "b29tX0NyZWF0ZRDtJxISCg1DTURfUm9vbV9Kb2luEPEnEhMKDkNNRF9Sb29t", + "X0xlYXZlEPInEiIKHUNNRF9Sb29tX015Um9vbV9TdGF0ZV9DaGFuZ2VkEPYn", + "EhYKEUNNRF9Sb29tX1dhaXRTdGVwENEoEicKIkNNRF9Sb29tX0hvc3RQbGF5", + "ZXJfVXBkYXRlU3RhdGVSYXcQ1CgSGgoVQ01EX1Jvb21fUGxheWVyX1JlYWR5", + "ENgoEiAKG0NNRF9Sb29tX1NpbmdlbF9QbGF5ZXJJbnB1dBD6LhIdChhDTURf", + "Uk9PTV9TWU5fUGxheWVySW5wdXQQ/y4SDwoKQ01EX1NjcmVlbhDZNiqPAQoJ", + "RXJyb3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAESGAoU", + "RVJST1JfUk9PTV9OT1RfRk9VTkQQChIlCiFFUlJPUl9ST09NX1NMT1RfUkVB", + "RExZX0hBRF9QTEFZRVIQCxIhCh1FUlJPUl9ST09NX0NBTlRfRE9fQ1VSUl9T", + "VEFURRAyKhwKCUxvZ2luVHlwZRIPCgtCYXNlRGVmYXVsdBAAKksKCkRldmlj", + "ZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZhdWx0EAASBgoCUEMQARILCgdBbmRy", + "b2lkEAISBwoDSU9TEAMSBwoDUFNWEAQqcAoNUm9vbUdhbWVTdGF0ZRISCg5O", + "b25lX0dhbWVTdGF0ZRAAEgwKCE9ubHlIb3N0EAESEQoNV2FpdFJhd1VwZGF0", + "ZRACEg0KCVdhaXRSZWFkeRADEgkKBVBhdXNlEAQSEAoMSW5PbmxpbmVHYW1l", + "EAUqTgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNf", + "QmFzZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnBy", + "b3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { @@ -99,7 +102,7 @@ namespace AxibugProtobuf { new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "DeviceUUID", "Token", "LastLoginDate", "RegDate", "Status", "UID" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_List), global::AxibugProtobuf.Protobuf_Room_List.Parser, null, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_List_RESP), global::AxibugProtobuf.Protobuf_Room_List_RESP.Parser, new[]{ "RoomMiniInfoList" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_MiniInfo), global::AxibugProtobuf.Protobuf_Room_MiniInfo.Parser, new[]{ "RoomID", "GameRomID", "GameRomHash", "GameState", "HostPlayerUID", "ObsUserCount", "Player1UID", "Player1NickName", "Player2UID", "Player2NickName" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_MiniInfo), global::AxibugProtobuf.Protobuf_Room_MiniInfo.Parser, new[]{ "RoomID", "GameRomID", "GameRomHash", "HostPlayerUID", "GameState", "ObsUserCount", "Player1UID", "Player1NickName", "Player2UID", "Player2NickName", "Player3UID", "Player3NickName", "Player4UID", "Player4NickName", "ScreenProviderUID" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Update_RESP), global::AxibugProtobuf.Protobuf_Room_Update_RESP.Parser, new[]{ "UpdateType", "RoomMiniInfo" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Screnn_Frame), global::AxibugProtobuf.Protobuf_Screnn_Frame.Parser, new[]{ "RoomID", "FrameID", "RawBitmap" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData), global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData.Parser, new[]{ "FrameID", "InputData" }, null, null, null, null), @@ -201,7 +204,7 @@ namespace AxibugProtobuf { /// [pbr::OriginalName("CMD_Room_Singel_PlayerInput")] CmdRoomSingelPlayerInput = 6010, /// - ///单个玩家操作同步下行 对应 Protobuf_Room_Syn_RoomFrameAllInputData + ///所有玩家操作同步下行 对应 Protobuf_Room_Syn_RoomFrameAllInputData /// [pbr::OriginalName("CMD_ROOM_SYN_PlayerInput")] CmdRoomSynPlayerInput = 6015, /// @@ -2071,13 +2074,18 @@ namespace AxibugProtobuf { roomID_ = other.roomID_; gameRomID_ = other.gameRomID_; gameRomHash_ = other.gameRomHash_; - gameState_ = other.gameState_; hostPlayerUID_ = other.hostPlayerUID_; + gameState_ = other.gameState_; obsUserCount_ = other.obsUserCount_; player1UID_ = other.player1UID_; player1NickName_ = other.player1NickName_; player2UID_ = other.player2UID_; player2NickName_ = other.player2NickName_; + player3UID_ = other.player3UID_; + player3NickName_ = other.player3NickName_; + player4UID_ = other.player4UID_; + player4NickName_ = other.player4NickName_; + screenProviderUID_ = other.screenProviderUID_; _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); } @@ -2125,6 +2133,20 @@ namespace AxibugProtobuf { } } + /// Field number for the "HostPlayerUID" field. + public const int HostPlayerUIDFieldNumber = 4; + private long hostPlayerUID_; + /// + ///主机玩家ID + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long HostPlayerUID { + get { return hostPlayerUID_; } + set { + hostPlayerUID_ = value; + } + } + /// Field number for the "GameState" field. public const int GameStateFieldNumber = 5; private global::AxibugProtobuf.RoomGameState gameState_ = global::AxibugProtobuf.RoomGameState.NoneGameState; @@ -2139,22 +2161,8 @@ namespace AxibugProtobuf { } } - /// Field number for the "HostPlayerUID" field. - public const int HostPlayerUIDFieldNumber = 6; - private int hostPlayerUID_; - /// - ///主机玩家ID - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int HostPlayerUID { - get { return hostPlayerUID_; } - set { - hostPlayerUID_ = value; - } - } - /// Field number for the "ObsUserCount" field. - public const int ObsUserCountFieldNumber = 7; + public const int ObsUserCountFieldNumber = 6; private int obsUserCount_; /// ///观战用户数量 @@ -2168,7 +2176,7 @@ namespace AxibugProtobuf { } /// Field number for the "Player1_UID" field. - public const int Player1UIDFieldNumber = 8; + public const int Player1UIDFieldNumber = 7; private long player1UID_; /// ///玩家1 UID @@ -2182,7 +2190,7 @@ namespace AxibugProtobuf { } /// Field number for the "Player1_NickName" field. - public const int Player1NickNameFieldNumber = 9; + public const int Player1NickNameFieldNumber = 8; private string player1NickName_ = ""; /// ///玩家1 昵称 @@ -2196,7 +2204,7 @@ namespace AxibugProtobuf { } /// Field number for the "Player2_UID" field. - public const int Player2UIDFieldNumber = 10; + public const int Player2UIDFieldNumber = 9; private long player2UID_; /// ///玩家2 UID @@ -2210,7 +2218,7 @@ namespace AxibugProtobuf { } /// Field number for the "Player2_NickName" field. - public const int Player2NickNameFieldNumber = 11; + public const int Player2NickNameFieldNumber = 10; private string player2NickName_ = ""; /// ///玩家2 昵称 @@ -2223,6 +2231,76 @@ namespace AxibugProtobuf { } } + /// Field number for the "Player3_UID" field. + public const int Player3UIDFieldNumber = 11; + private long player3UID_; + /// + ///玩家3 UID + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long Player3UID { + get { return player3UID_; } + set { + player3UID_ = value; + } + } + + /// Field number for the "Player3_NickName" field. + public const int Player3NickNameFieldNumber = 12; + private string player3NickName_ = ""; + /// + ///玩家3 昵称 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Player3NickName { + get { return player3NickName_; } + set { + player3NickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Player4_UID" field. + public const int Player4UIDFieldNumber = 13; + private long player4UID_; + /// + ///玩家4 UID + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long Player4UID { + get { return player4UID_; } + set { + player4UID_ = value; + } + } + + /// Field number for the "Player4_NickName" field. + public const int Player4NickNameFieldNumber = 14; + private string player4NickName_ = ""; + /// + ///玩家4 昵称 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Player4NickName { + get { return player4NickName_; } + set { + player4NickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "ScreenProviderUID" field. + public const int ScreenProviderUIDFieldNumber = 15; + private long screenProviderUID_; + /// + ///屏幕数据供应者 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long ScreenProviderUID { + get { return screenProviderUID_; } + set { + screenProviderUID_ = value; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { return Equals(other as Protobuf_Room_MiniInfo); @@ -2239,13 +2317,18 @@ namespace AxibugProtobuf { if (RoomID != other.RoomID) return false; if (GameRomID != other.GameRomID) return false; if (GameRomHash != other.GameRomHash) return false; - if (GameState != other.GameState) return false; if (HostPlayerUID != other.HostPlayerUID) return false; + if (GameState != other.GameState) return false; if (ObsUserCount != other.ObsUserCount) return false; if (Player1UID != other.Player1UID) return false; if (Player1NickName != other.Player1NickName) return false; if (Player2UID != other.Player2UID) return false; if (Player2NickName != other.Player2NickName) return false; + if (Player3UID != other.Player3UID) return false; + if (Player3NickName != other.Player3NickName) return false; + if (Player4UID != other.Player4UID) return false; + if (Player4NickName != other.Player4NickName) return false; + if (ScreenProviderUID != other.ScreenProviderUID) return false; return Equals(_unknownFields, other._unknownFields); } @@ -2255,13 +2338,18 @@ namespace AxibugProtobuf { if (RoomID != 0) hash ^= RoomID.GetHashCode(); if (GameRomID != 0) hash ^= GameRomID.GetHashCode(); if (GameRomHash.Length != 0) hash ^= GameRomHash.GetHashCode(); + if (HostPlayerUID != 0L) hash ^= HostPlayerUID.GetHashCode(); if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) hash ^= GameState.GetHashCode(); - if (HostPlayerUID != 0) hash ^= HostPlayerUID.GetHashCode(); if (ObsUserCount != 0) hash ^= ObsUserCount.GetHashCode(); if (Player1UID != 0L) hash ^= Player1UID.GetHashCode(); if (Player1NickName.Length != 0) hash ^= Player1NickName.GetHashCode(); if (Player2UID != 0L) hash ^= Player2UID.GetHashCode(); if (Player2NickName.Length != 0) hash ^= Player2NickName.GetHashCode(); + if (Player3UID != 0L) hash ^= Player3UID.GetHashCode(); + if (Player3NickName.Length != 0) hash ^= Player3NickName.GetHashCode(); + if (Player4UID != 0L) hash ^= Player4UID.GetHashCode(); + if (Player4NickName.Length != 0) hash ^= Player4NickName.GetHashCode(); + if (ScreenProviderUID != 0L) hash ^= ScreenProviderUID.GetHashCode(); if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } @@ -2290,34 +2378,54 @@ namespace AxibugProtobuf { output.WriteRawTag(26); output.WriteString(GameRomHash); } + if (HostPlayerUID != 0L) { + output.WriteRawTag(32); + output.WriteInt64(HostPlayerUID); + } if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) { output.WriteRawTag(40); output.WriteEnum((int) GameState); } - if (HostPlayerUID != 0) { - output.WriteRawTag(48); - output.WriteInt32(HostPlayerUID); - } if (ObsUserCount != 0) { - output.WriteRawTag(56); + output.WriteRawTag(48); output.WriteInt32(ObsUserCount); } if (Player1UID != 0L) { - output.WriteRawTag(64); + output.WriteRawTag(56); output.WriteInt64(Player1UID); } if (Player1NickName.Length != 0) { - output.WriteRawTag(74); + output.WriteRawTag(66); output.WriteString(Player1NickName); } if (Player2UID != 0L) { - output.WriteRawTag(80); + output.WriteRawTag(72); output.WriteInt64(Player2UID); } if (Player2NickName.Length != 0) { - output.WriteRawTag(90); + output.WriteRawTag(82); output.WriteString(Player2NickName); } + if (Player3UID != 0L) { + output.WriteRawTag(88); + output.WriteInt64(Player3UID); + } + if (Player3NickName.Length != 0) { + output.WriteRawTag(98); + output.WriteString(Player3NickName); + } + if (Player4UID != 0L) { + output.WriteRawTag(104); + output.WriteInt64(Player4UID); + } + if (Player4NickName.Length != 0) { + output.WriteRawTag(114); + output.WriteString(Player4NickName); + } + if (ScreenProviderUID != 0L) { + output.WriteRawTag(120); + output.WriteInt64(ScreenProviderUID); + } if (_unknownFields != null) { _unknownFields.WriteTo(output); } @@ -2339,34 +2447,54 @@ namespace AxibugProtobuf { output.WriteRawTag(26); output.WriteString(GameRomHash); } + if (HostPlayerUID != 0L) { + output.WriteRawTag(32); + output.WriteInt64(HostPlayerUID); + } if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) { output.WriteRawTag(40); output.WriteEnum((int) GameState); } - if (HostPlayerUID != 0) { - output.WriteRawTag(48); - output.WriteInt32(HostPlayerUID); - } if (ObsUserCount != 0) { - output.WriteRawTag(56); + output.WriteRawTag(48); output.WriteInt32(ObsUserCount); } if (Player1UID != 0L) { - output.WriteRawTag(64); + output.WriteRawTag(56); output.WriteInt64(Player1UID); } if (Player1NickName.Length != 0) { - output.WriteRawTag(74); + output.WriteRawTag(66); output.WriteString(Player1NickName); } if (Player2UID != 0L) { - output.WriteRawTag(80); + output.WriteRawTag(72); output.WriteInt64(Player2UID); } if (Player2NickName.Length != 0) { - output.WriteRawTag(90); + output.WriteRawTag(82); output.WriteString(Player2NickName); } + if (Player3UID != 0L) { + output.WriteRawTag(88); + output.WriteInt64(Player3UID); + } + if (Player3NickName.Length != 0) { + output.WriteRawTag(98); + output.WriteString(Player3NickName); + } + if (Player4UID != 0L) { + output.WriteRawTag(104); + output.WriteInt64(Player4UID); + } + if (Player4NickName.Length != 0) { + output.WriteRawTag(114); + output.WriteString(Player4NickName); + } + if (ScreenProviderUID != 0L) { + output.WriteRawTag(120); + output.WriteInt64(ScreenProviderUID); + } if (_unknownFields != null) { _unknownFields.WriteTo(ref output); } @@ -2385,12 +2513,12 @@ namespace AxibugProtobuf { if (GameRomHash.Length != 0) { size += 1 + pb::CodedOutputStream.ComputeStringSize(GameRomHash); } + if (HostPlayerUID != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(HostPlayerUID); + } if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) { size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) GameState); } - if (HostPlayerUID != 0) { - size += 1 + pb::CodedOutputStream.ComputeInt32Size(HostPlayerUID); - } if (ObsUserCount != 0) { size += 1 + pb::CodedOutputStream.ComputeInt32Size(ObsUserCount); } @@ -2406,6 +2534,21 @@ namespace AxibugProtobuf { if (Player2NickName.Length != 0) { size += 1 + pb::CodedOutputStream.ComputeStringSize(Player2NickName); } + if (Player3UID != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Player3UID); + } + if (Player3NickName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Player3NickName); + } + if (Player4UID != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Player4UID); + } + if (Player4NickName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Player4NickName); + } + if (ScreenProviderUID != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(ScreenProviderUID); + } if (_unknownFields != null) { size += _unknownFields.CalculateSize(); } @@ -2426,12 +2569,12 @@ namespace AxibugProtobuf { if (other.GameRomHash.Length != 0) { GameRomHash = other.GameRomHash; } + if (other.HostPlayerUID != 0L) { + HostPlayerUID = other.HostPlayerUID; + } if (other.GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) { GameState = other.GameState; } - if (other.HostPlayerUID != 0) { - HostPlayerUID = other.HostPlayerUID; - } if (other.ObsUserCount != 0) { ObsUserCount = other.ObsUserCount; } @@ -2447,6 +2590,21 @@ namespace AxibugProtobuf { if (other.Player2NickName.Length != 0) { Player2NickName = other.Player2NickName; } + if (other.Player3UID != 0L) { + Player3UID = other.Player3UID; + } + if (other.Player3NickName.Length != 0) { + Player3NickName = other.Player3NickName; + } + if (other.Player4UID != 0L) { + Player4UID = other.Player4UID; + } + if (other.Player4NickName.Length != 0) { + Player4NickName = other.Player4NickName; + } + if (other.ScreenProviderUID != 0L) { + ScreenProviderUID = other.ScreenProviderUID; + } _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); } @@ -2473,34 +2631,54 @@ namespace AxibugProtobuf { GameRomHash = input.ReadString(); break; } + case 32: { + HostPlayerUID = input.ReadInt64(); + break; + } case 40: { GameState = (global::AxibugProtobuf.RoomGameState) input.ReadEnum(); break; } case 48: { - HostPlayerUID = input.ReadInt32(); - break; - } - case 56: { ObsUserCount = input.ReadInt32(); break; } - case 64: { + case 56: { Player1UID = input.ReadInt64(); break; } - case 74: { + case 66: { Player1NickName = input.ReadString(); break; } - case 80: { + case 72: { Player2UID = input.ReadInt64(); break; } - case 90: { + case 82: { Player2NickName = input.ReadString(); break; } + case 88: { + Player3UID = input.ReadInt64(); + break; + } + case 98: { + Player3NickName = input.ReadString(); + break; + } + case 104: { + Player4UID = input.ReadInt64(); + break; + } + case 114: { + Player4NickName = input.ReadString(); + break; + } + case 120: { + ScreenProviderUID = input.ReadInt64(); + break; + } } } #endif @@ -2527,34 +2705,54 @@ namespace AxibugProtobuf { GameRomHash = input.ReadString(); break; } + case 32: { + HostPlayerUID = input.ReadInt64(); + break; + } case 40: { GameState = (global::AxibugProtobuf.RoomGameState) input.ReadEnum(); break; } case 48: { - HostPlayerUID = input.ReadInt32(); - break; - } - case 56: { ObsUserCount = input.ReadInt32(); break; } - case 64: { + case 56: { Player1UID = input.ReadInt64(); break; } - case 74: { + case 66: { Player1NickName = input.ReadString(); break; } - case 80: { + case 72: { Player2UID = input.ReadInt64(); break; } - case 90: { + case 82: { Player2NickName = input.ReadString(); break; } + case 88: { + Player3UID = input.ReadInt64(); + break; + } + case 98: { + Player3NickName = input.ReadString(); + break; + } + case 104: { + Player4UID = input.ReadInt64(); + break; + } + case 114: { + Player4NickName = input.ReadString(); + break; + } + case 120: { + ScreenProviderUID = input.ReadInt64(); + break; + } } } }