提交bug 艰难先这样

This commit is contained in:
PC-20230316NUNE\Administrator
2024-08-22 20:37:39 +08:00
parent 5858bd2407
commit 8932528f5e
118 changed files with 5271 additions and 4939 deletions

View File

@@ -1,6 +1,7 @@
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;
@@ -14,6 +15,12 @@ namespace AppGame.Systems
private int _clientId;
public int ClientId => _clientId;
/// <summary>
/// 区块服务器标识
/// </summary>
private string _tileServer;
public string TileServer => _tileServer;
public void BindID(int clientId)
{
_clientId = clientId;
@@ -23,6 +30,10 @@ namespace AppGame.Systems
{
_point = point;
}
public void SetTileServer(string tileServer)
{
_tileServer = tileServer;
}
protected override async UniTask<string> GetEndPoint()
{
@@ -36,6 +47,7 @@ namespace AppGame.Systems
//监听服务端事件
AddListener((int)NActionEnum.NSyncStateDataUpdate,OnNSyncStateDataUpdate);
AddListener((int)NActionEnum.LocalClientConnect,OnClientConnect);
AddListener((int)NActionEnum.NSyncTileAllUpdateBack,OnNSyncTileAllUpdateBack);
//连接
await base.OnInit();
@@ -49,6 +61,8 @@ namespace AppGame.Systems
{
ClientId = ClientId
});
//向服务器索要全量信息
Send((int)NActionEnum.NSyncTileAllUpdate);
}
private void OnNSyncStateDataUpdate(byte[] data)
@@ -56,5 +70,26 @@ namespace AppGame.Systems
var info = JNStateItemData.Parser.ParseFrom(data);
App.Game.AddState(info);
}
/// <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 =>
{
App.Game.AddState(child);
});
}
}
}

View File

@@ -2,9 +2,13 @@
using System.Collections.Generic;
using System.Net.Sockets;
using System.Threading.Tasks;
using AppGame.Sync;
using Cysharp.Threading.Tasks;
using DotRecast.Core.Collections;
using Google.Protobuf;
using JNGame.Network;
using JNGame.Sync.System;
using JNGame.Sync.System.Data;
using Plugins.JNGame.Network;
using Plugins.JNGame.Network.Action;
@@ -27,6 +31,8 @@ namespace AppGame.Systems
//监听服务端事件
AddListener((int)NActionEnum.NSyncFrameInput,OnNSyncFrameInput);
AddListener((int)NActionEnum.NSyncTileInput,OnNSyncTileInput);
AddListener((int)NActionEnum.NSyncTileAllUpdate,OnNSyncTileAllUpdate);
AddListener((int)NActionEnum.NSyncTileGetTileInfo,OnNSyncTileGetTileInfo);
AddListener((int)GActionEnum.BindClientID,OnBindClientID);
//连接
@@ -87,6 +93,72 @@ namespace AppGame.Systems
});
App.Game.AddTileInput(inputs);
}
/// <summary>
/// 返回全量信息
/// </summary>
private void OnNSyncTileAllUpdate(JNServerParam args)
{
if (App.Game.Server is not JNGTileServerSystem tileServer) return;
var allData = new JNStateTileAllData();
allData.TId = tileServer.TID;
allData.Data = new JNStateAllData();
tileServer.GetSystems<ISTileDataSystem>().ForEach(data =>
{
var item = new JNStateItemData();
allData.Data.Data.Add(item);
item.NetID = ((ISStateDataSystem)data).NetID;
data.GetHostDataBytes().ForEach(keyValue =>
{
item.Messages[keyValue.Key] = new JNStateData() { Data = ByteString.CopyFrom(keyValue.Value) };
});
});
Send(args.Client, (int)NActionEnum.NSyncTileAllUpdateBack,allData);
}
/// <summary>
/// 获取指定区块的全量信息
/// </summary>
private void OnNSyncTileGetTileInfo(JNServerParam args)
{
if (App.Game.Server is not JNGTileServerSystem tileServer) return;
var tileSpecify = NSyncTileGetTileInfoRequest.Parser.ParseFrom(args.Message);
var allData = new JNStateTileAllData();
allData.TId = tileServer.TID;
allData.Data = new JNStateAllData();
tileServer.GetSystems<ISTileDataSystem>().ForEach(data =>
{
var item = new JNStateItemData();
allData.Data.Data.Add(item);
item.NetID = ((ISStateDataSystem)data).NetID;
data.GetTileDataBytes(tileSpecify.TId).ForEach(keyValue =>
{
item.Messages[keyValue.Key] = new JNStateData() { Data = ByteString.CopyFrom(keyValue.Value) };
});
});
//返回消息
SendCallback(args.Client,args.MessageID,allData);
}
}
}

View File

@@ -1,6 +1,7 @@
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;
@@ -12,10 +13,20 @@ namespace AppGame.Systems
private string _point;
/// <summary>
/// 区块服务器标识
/// </summary>
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<string> GetEndPoint()
{
@@ -28,11 +39,19 @@ namespace AppGame.Systems
//监听服务端事件
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)
{
@@ -40,5 +59,41 @@ namespace AppGame.Systems
App.Game.AddState(info);
}
/// <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 =>
{
App.Game.AddState(child);
});
}
/// <summary>
/// 区块全量更新指定区块
/// </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);
}
}
}