초기커밋
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_UGC_NPC_RANK), typeof(GetUgcNpcRankPacketHandler), typeof(GameLoginListener))]
|
||||
public class GetUgcNpcRankPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public static bool send_GS2C_ACK_UGC_NPC_RANK(Player owner, Result result, UgcNpcRankType rankType, UgcNpcRankState rankState, List<UgcNpcRank>? ranking)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgcNpcRank = new();
|
||||
|
||||
|
||||
if (result.isSuccess())
|
||||
{
|
||||
ack_packet.Response.AckUgcNpcRank.Type = rankType;
|
||||
ack_packet.Response.AckUgcNpcRank.State = rankState;
|
||||
|
||||
ranking ??= new List<UgcNpcRank>();
|
||||
ack_packet.Response.AckUgcNpcRank.UgcNpcRank.AddRange(ranking);
|
||||
}
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
|
||||
{
|
||||
var result = new Result();
|
||||
string err_msg;
|
||||
|
||||
var player = entityWithSession as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => "player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
// 1. 기본 정보 체크
|
||||
var request = (recvMessage as ClientToGame)?.Request.ReqUgcNpcRank;
|
||||
if (null == request)
|
||||
{
|
||||
err_msg = $"Failed to get Request !!! : {nameof(ClientToGame.Request.ReqUgcNpcRank)}";
|
||||
result.setFail(ServerErrorCode.InvalidArgument, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_GS2C_ACK_UGC_NPC_RANK(player,result, UgcNpcRankType.None, UgcNpcRankState.None, null);
|
||||
return result;
|
||||
}
|
||||
|
||||
var ranking_entity = server_logic.findGlobalEntity<UgcNpcRankEntity>();
|
||||
if (null == ranking_entity)
|
||||
{
|
||||
err_msg = $"Failed to get Request !!! : {nameof(ClientToGame.Request.ReqUgcNpcRank)}";
|
||||
result.setFail(ServerErrorCode.UgcNpcRankEntityIsNotFound, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_GS2C_ACK_UGC_NPC_RANK(player,result, request.Type, request.State, null);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 2. request validation 체크
|
||||
if (false == checkRequestValidation(request))
|
||||
{
|
||||
err_msg = $"Failed to get Request !!! : {nameof(ClientToGame.Request.ReqUgcNpcRank)}";
|
||||
result.setFail(ServerErrorCode.InvalidArgument, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
send_GS2C_ACK_UGC_NPC_RANK(player,result, request.Type, request.State, null);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 3. ranking data 조회
|
||||
(Result result, List<UgcNpcRank>? ranks) res_rank = new();
|
||||
res_rank.result = result;
|
||||
|
||||
switch (request.Type)
|
||||
{
|
||||
case UgcNpcRankType.Like:
|
||||
var like_action = ranking_entity.getEntityAction<UgcNpcLikeRankAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(like_action, () => $"UgcNpcLikeRankAction is null !!! - player:{player.toBasicString()}");
|
||||
|
||||
res_rank = await like_action.getRanks(request.State);
|
||||
break;
|
||||
case UgcNpcRankType.Communication:
|
||||
var communication_action = ranking_entity.getEntityAction<UgcNpcCommunicationRankAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(communication_action, () => $"UgcNpcCommunicationRankAction is null !!! - player:{player.toBasicString()}");
|
||||
|
||||
res_rank = await communication_action.getRanks(request.State);
|
||||
break;
|
||||
case UgcNpcRankType.Quest:
|
||||
var quest_action = ranking_entity.getEntityAction<UgcNpcQuestRankAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"UgcNpcQuestRankAction is null !!! - player:{player.toBasicString()}");
|
||||
|
||||
res_rank = await quest_action.getRanks(request.State);
|
||||
break;
|
||||
}
|
||||
|
||||
send_GS2C_ACK_UGC_NPC_RANK(player, res_rank.result, request.Type, request.State, res_rank.ranks);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private bool checkRequestValidation(ClientToGameReq.Types.C2GS_REQ_UGC_NPC_RANK request)
|
||||
{
|
||||
// 1. state 체크
|
||||
if (request.State == UgcNpcRankState.None) return false;
|
||||
|
||||
// 2. type 체크
|
||||
if (request.Type == UgcNpcRankType.None) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user