mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2026-02-04 09:35:04 +01:00
client data implementation
This commit is contained in:
31
Common/Database/ClientData.cs
Normal file
31
Common/Database/ClientData.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using Common.Resources.Proto;
|
||||||
|
using MongoDB.Bson;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
|
||||||
|
namespace Common.Database
|
||||||
|
{
|
||||||
|
public class ClientData
|
||||||
|
{
|
||||||
|
public static readonly IMongoCollection<ClientDataScheme> collection = Global.db.GetCollection<ClientDataScheme>("ClientDatas");
|
||||||
|
|
||||||
|
public static ClientDataScheme? GetClientData(uint uid, ClientDataType type, uint id)
|
||||||
|
{
|
||||||
|
return collection.AsQueryable().Where(c => c.OwnerUid == uid && c.Type == type && c.ClientDataId == id).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetClientData(uint uid, ClientDataType type, uint id, byte[] data)
|
||||||
|
{
|
||||||
|
collection.UpdateOne(Builders<ClientDataScheme>.Filter.Where(c => c.OwnerUid == uid && c.Type == type && c.ClientDataId == id), Builders<ClientDataScheme>.Update.Set("Type", type).Set("ClientDataId", id).Set("Data", data).SetOnInsert("OwnerUid", uid), new UpdateOptions() { IsUpsert = true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
||||||
|
public class ClientDataScheme
|
||||||
|
{
|
||||||
|
public ObjectId Id { get; set; }
|
||||||
|
public uint OwnerUid { get; set; }
|
||||||
|
public ClientDataType Type { get; set; }
|
||||||
|
public uint ClientDataId { get; set; }
|
||||||
|
public byte[] Data { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using Common.Resources.Proto;
|
using Common.Database;
|
||||||
|
using Common.Resources.Proto;
|
||||||
|
|
||||||
namespace PemukulPaku.GameServer.Handlers
|
namespace PemukulPaku.GameServer.Handlers
|
||||||
{
|
{
|
||||||
@@ -8,8 +9,24 @@ namespace PemukulPaku.GameServer.Handlers
|
|||||||
public void Handle(Session session, Packet packet)
|
public void Handle(Session session, Packet packet)
|
||||||
{
|
{
|
||||||
GetClientDataReq Data = packet.GetDecodedBody<GetClientDataReq>();
|
GetClientDataReq Data = packet.GetDecodedBody<GetClientDataReq>();
|
||||||
|
ClientDataScheme? clientData = Common.Database.ClientData.GetClientData(session.Player.User.Uid, Data.Type, Data.Id);
|
||||||
|
GetClientDataRsp Rsp = new() { retcode = GetClientDataRsp.Retcode.Succ, Id = Data.Id, Type = Data.Type };
|
||||||
|
|
||||||
session.Send(Packet.FromProto(new GetClientDataRsp() { retcode = GetClientDataRsp.Retcode.NotFound, Type = Data.Type, Id = Data.Id }, CmdId.GetClientDataRsp));
|
if (clientData is not null)
|
||||||
|
{
|
||||||
|
Rsp.ClientDataLists.Add(new()
|
||||||
|
{
|
||||||
|
Id = clientData.ClientDataId,
|
||||||
|
Type = clientData.Type,
|
||||||
|
Data = clientData.Data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Rsp.retcode = GetClientDataRsp.Retcode.NotFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
session.Send(Packet.FromProto(Rsp, CmdId.GetClientDataRsp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
GameServer/Handlers/SetClientDataReqHandler.cs
Normal file
17
GameServer/Handlers/SetClientDataReqHandler.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using Common.Database;
|
||||||
|
using Common.Resources.Proto;
|
||||||
|
|
||||||
|
namespace PemukulPaku.GameServer.Handlers
|
||||||
|
{
|
||||||
|
[PacketCmdId(CmdId.SetClientDataReq)]
|
||||||
|
internal class SetClientDataReqHandler : IPacketHandler
|
||||||
|
{
|
||||||
|
public void Handle(Session session, Packet packet)
|
||||||
|
{
|
||||||
|
SetClientDataReq Data = packet.GetDecodedBody<SetClientDataReq>();
|
||||||
|
Common.Database.ClientData.SetClientData(session.Player.User.Uid, Data.ClientData.Type, Data.ClientData.Id, Data.ClientData.Data);
|
||||||
|
|
||||||
|
session.Send(Packet.FromProto(new SetClientDataRsp() { retcode = SetClientDataRsp.Retcode.Succ, Id = Data.ClientData.Id, Type = Data.ClientData.Type }, CmdId.SetClientDataRsp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user