using System.Net; using System.Threading.Tasks; using AppGame.Systems.CServer; 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 GBindClientID() { ClientId = ClientId }); //向服务器绑定角色 Send((int)GActionEnum.BindClientRole,new GBindClientRole() { Role = (int)JNGClientRole.Player }); //向服务器索要全量信息 Send((int)NActionEnum.NSyncTileAllUpdate); } private void OnNSyncStateDataUpdate(byte[] data) { var info = JNStateItemData.Parser.ParseFrom(data); App.Game.SyncState(info,true,false); } /// /// 状态同步全量回调 /// /// private void OnNSyncTileAllUpdateBack(byte[] data) { var allData = JNStateTileAllData.Parser.ParseFrom(data); App.Game.ClearTileState(allData.TId); //生效全局回调 allData.Data.Data.ForEach(child => { App.Game.SyncState(child,true,false); }); } } }