using System.Net; using System.Threading.Tasks; using Cysharp.Threading.Tasks; using DotRecast.Core.Collections; using JNGame.Network; using Plugins.JNGame.Network; using Plugins.JNGame.Network.Action; namespace AppGame.Systems { public class JNGClient : JNTCPClient { private string _point; private int _clientId; public int ClientId => _clientId; /// /// 区块服务器标识 /// private string _tileServer; public string TileServer => _tileServer; public void BindID(int clientId) { _clientId = clientId; } public void SetPoint(string point) { _point = point; } public void SetTileServer(string tileServer) { _tileServer = tileServer; } protected override async UniTask GetEndPoint() { await UniTask.NextFrame(); return _point; } public override async Task OnInit() { //监听服务端事件 AddListener((int)NActionEnum.NSyncStateDataUpdate,OnNSyncStateDataUpdate); AddListener((int)NActionEnum.LocalClientConnect,OnClientConnect); AddListener((int)NActionEnum.NSyncTileAllUpdateBack,OnNSyncTileAllUpdateBack); //连接 await base.OnInit(); } private void OnClientConnect(byte[] obj) { //向服务器发送玩家Id Send((int)GActionEnum.BindClientID,new RClientIDMessage() { ClientId = ClientId }); //向服务器索要全量信息 Send((int)NActionEnum.NSyncTileAllUpdate); } private void OnNSyncStateDataUpdate(byte[] data) { var info = JNStateItemData.Parser.ParseFrom(data); App.Game.AddState(info); } /// /// 状态同步全量回调 /// /// private void OnNSyncTileAllUpdateBack(byte[] data) { var allData = JNStateTileAllData.Parser.ParseFrom(data); App.Game.ClearTileState(allData.TId); //生效全局回调 allData.Data.Data.ForEach(child => { App.Game.AddState(child); }); } } }