117 lines
3.1 KiB
C#
Raw Permalink Normal View History

2024-08-31 15:35:12 +08:00
using System.Threading.Tasks;
using AppGame.Systems.CServer;
2024-08-17 14:27:18 +08:00
using Cysharp.Threading.Tasks;
2024-08-22 20:37:39 +08:00
using DotRecast.Core.Collections;
2024-08-19 11:51:17 +08:00
using JNGame.Network;
2024-08-17 14:27:18 +08:00
using Plugins.JNGame.Network.Action;
namespace AppGame.Systems
{
public class JNGTileClient : JNTCPClient
{
2024-08-19 11:51:17 +08:00
private string _point;
2024-08-17 14:27:18 +08:00
2024-08-22 20:37:39 +08:00
/// <summary>
/// 区块服务器标识
/// </summary>
private string _tileServer;
public string TileServer => _tileServer;
2024-08-31 15:35:12 +08:00
private JNGClientRole _role;
public JNGClientRole Role => _role;
/// <summary>
/// 设置IP
/// </summary>
2024-08-19 11:51:17 +08:00
public void SetPoint(string point)
2024-08-17 14:27:18 +08:00
{
_point = point;
}
2024-08-31 15:35:12 +08:00
/// <summary>
/// 设置角色
/// </summary>
public void SetRole(JNGClientRole role)
{
_role = role;
}
2024-08-22 20:37:39 +08:00
public void SetTileServer(string tileServer)
{
_tileServer = tileServer;
}
2024-08-17 14:27:18 +08:00
2024-08-19 11:51:17 +08:00
protected override async UniTask<string> GetEndPoint()
2024-08-17 14:27:18 +08:00
{
await UniTask.NextFrame();
return _point;
}
public override async Task OnInit()
{
//监听服务端事件
AddListener((int)NActionEnum.NSyncStateDataUpdate,OnNSyncStateDataUpdate);
2024-08-22 20:37:39 +08:00
AddListener((int)NActionEnum.LocalClientConnect,OnClientConnect);
AddListener((int)NActionEnum.NSyncTileAllUpdateBack,OnNSyncTileAllUpdateBack);
2024-08-17 14:27:18 +08:00
//连接
await base.OnInit();
}
2024-08-22 20:37:39 +08:00
private void OnClientConnect(byte[] obj)
{
2024-08-31 15:35:12 +08:00
//向服务器绑定角色
Send((int)GActionEnum.BindClientRole,new GBindClientRole()
{
Role = (int)Role
});
2024-08-22 20:37:39 +08:00
//向服务器索要全量信息
Send((int)NActionEnum.NSyncTileAllUpdate);
}
2024-08-17 14:27:18 +08:00
private void OnNSyncStateDataUpdate(byte[] data)
{
var info = JNStateItemData.Parser.ParseFrom(data);
2024-09-23 03:50:27 +08:00
App.Game.SyncState(info,false,true);
2024-08-17 14:27:18 +08:00
}
2024-08-22 20:37:39 +08:00
/// <summary>
/// 状态同步全量回调
/// </summary>
/// <param name="obj"></param>
private void OnNSyncTileAllUpdateBack(byte[] data)
{
var allData = JNStateTileAllData.Parser.ParseFrom(data);
App.Game.ClearTileState(allData.TId);
//生效全局状态
allData.Data.Data.ForEach(child =>
{
2024-09-23 03:50:27 +08:00
App.Game.SyncState(child,false,true);
2024-08-22 20:37:39 +08:00
});
}
/// <summary>
2024-08-31 15:35:12 +08:00
/// 获取指定区块状态
2024-08-22 20:37:39 +08:00
/// </summary>
public async Task<JNStateTileAllData> 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);
}
2024-08-17 14:27:18 +08:00
}
}