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 JNGTileClient : JNTCPClient { private string _point; /// /// 区块服务器标识 /// private string _tileServer; public string TileServer => _tileServer; 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) { //向服务器索要全量信息 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); } } }