using System.Threading.Tasks; using AppGame.Systems.CServer; using Cysharp.Threading.Tasks; using DotRecast.Core.Collections; using JNGame.Network; using Plugins.JNGame.Network.Action; namespace AppGame.Systems { public class JNGTileClient : JNTCPClient { private string _point; /// /// 区块服务器标识 /// private string _tileServer; public string TileServer => _tileServer; private JNGClientRole _role; public JNGClientRole Role => _role; /// /// 设置IP /// public void SetPoint(string point) { _point = point; } /// /// 设置角色 /// public void SetRole(JNGClientRole role) { _role = role; } 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) { //向服务器绑定角色 Send((int)GActionEnum.BindClientRole,new GBindClientRole() { Role = (int)Role }); //向服务器索要全量信息 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); }); } /// /// 获取指定区块状态 /// public async Task NSyncTileGetTileInfo(int index) { var data = new NSyncTileGetTileInfoRequest() { TId = index }; var result = await SendCallback((int)NActionEnum.NSyncTileGetTileInfo, data); if (result is null) return null; return JNStateTileAllData.Parser.ParseFrom(result); } } }