Add Support For ServerPrefs (remove red dot)

This commit is contained in:
Somebody
2024-08-08 15:17:58 +08:00
parent 0799cdee23
commit a36dc152a4
8 changed files with 145 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
using EggLink.DanhengServer.Proto;
using Google.Protobuf;
using SqlSugar;
namespace EggLink.DanhengServer.Database.Player;
[SugarTable("server_prefs_data")]
public class ServerPrefsData : BaseDatabaseDataHelper
{
[SugarColumn(IsJson = true)]
public Dictionary<int, ServerPrefsInfo> ServerPrefsDict { get; set; } = [];
public void SetData(int prefsId, string b64Data)
{
ServerPrefsDict[prefsId] = new ServerPrefsInfo()
{
ServerPrefsId = prefsId,
Data = b64Data
};
}
}
public class ServerPrefsInfo
{
public int ServerPrefsId { get; set; }
public string Data { get; set; } = "";
public ServerPrefs ToProto() => new()
{
Data = ByteString.FromBase64(Data),
ServerPrefsId = (uint)ServerPrefsId
};
}

View File

@@ -76,6 +76,7 @@ public class PlayerInstance(PlayerData data)
public HeartDialData? HeartDialData { get; private set; }
public TutorialData? TutorialData { get; private set; }
public TutorialGuideData? TutorialGuideData { get; private set; }
public ServerPrefsData? ServerPrefsData { get; private set; }
public SceneInstance? SceneInstance { get; private set; }
public int Uid { get; set; }
public Connection? Connection { get; set; }
@@ -148,6 +149,8 @@ public class PlayerInstance(PlayerData data)
HeartDialData = InitializeDatabase<HeartDialData>();
TutorialData = InitializeDatabase<TutorialData>();
TutorialGuideData = InitializeDatabase<TutorialGuideData>();
ServerPrefsData = InitializeDatabase<ServerPrefsData>();
Data.LastActiveTime = Extensions.GetUnixSec();

View File

@@ -0,0 +1,14 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.ServerPrefs;
using EggLink.DanhengServer.Kcp;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.ServerPrefs;
[Opcode(CmdIds.GetAllServerPrefsDataCsReq)]
public class HandlerGetAllServerPrefsDataCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var infos = connection.Player?.ServerPrefsData?.ServerPrefsDict.Values.ToList() ?? [];
await connection.SendPacket(new PacketGetAllServerPrefsDataScRsp(infos));
}
}

View File

@@ -0,0 +1,18 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.ServerPrefs;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.ServerPrefs;
[Opcode(CmdIds.GetServerPrefsDataCsReq)]
public class HandlerGetServerPrefsDataCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetServerPrefsDataCsReq.Parser.ParseFrom(data);
var info = connection.Player!.ServerPrefsData?.ServerPrefsDict.GetValueOrDefault((int)req.ServerPrefsId);
await connection.SendPacket(new PacketGetServerPrefsDataScRsp(info, req.ServerPrefsId));
}
}

View File

@@ -0,0 +1,17 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.ServerPrefs;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.ServerPrefs;
[Opcode(CmdIds.UpdateServerPrefsDataCsReq)]
public class HandlerUpdateServerPrefsDataCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = UpdateServerPrefsDataCsReq.Parser.ParseFrom(data);
connection.Player?.ServerPrefsData?.SetData((int)req.ServerPrefs.ServerPrefsId, req.ServerPrefs.Data.ToBase64());
await connection.SendPacket(new PacketUpdateServerPrefsDataScRsp(req.ServerPrefs.ServerPrefsId));
}
}

View File

@@ -0,0 +1,20 @@
using EggLink.DanhengServer.Database.Player;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.ServerPrefs;
public class PacketGetAllServerPrefsDataScRsp : BasePacket
{
public PacketGetAllServerPrefsDataScRsp(List<ServerPrefsInfo> infos) : base(CmdIds.GetAllServerPrefsDataScRsp)
{
var proto = new GetAllServerPrefsDataScRsp();
foreach (var info in infos)
{
proto.CFHMFEBMJIK.Add(info.ToProto());
}
SetData(proto);
}
}

View File

@@ -0,0 +1,23 @@
using EggLink.DanhengServer.Database.Player;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
using Google.Protobuf;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.ServerPrefs;
public class PacketGetServerPrefsDataScRsp : BasePacket
{
public PacketGetServerPrefsDataScRsp(ServerPrefsInfo? info, uint id) : base(CmdIds.GetServerPrefsDataScRsp)
{
var proto = new GetServerPrefsDataScRsp
{
ServerPrefs = info?.ToProto() ?? new Proto.ServerPrefs()
{
Data = ByteString.Empty,
ServerPrefsId = id
}
};
SetData(proto);
}
}

View File

@@ -0,0 +1,17 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.ServerPrefs;
public class PacketUpdateServerPrefsDataScRsp : BasePacket
{
public PacketUpdateServerPrefsDataScRsp(uint prefsId) : base(CmdIds.UpdateServerPrefsDataScRsp)
{
var proto = new UpdateServerPrefsDataScRsp
{
ServerPrefsId = prefsId
};
SetData(proto);
}
}