121 lines
5.4 KiB
C#
121 lines
5.4 KiB
C#
using GameServer.Contents.GameMode.Helper;
|
|
using GameServer.Contents.GameMode.Manage.PlayManage;
|
|
using Google.Protobuf;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
using ServerCore;
|
|
|
|
namespace GameServer.PacketHandler;
|
|
|
|
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_GAME_OBJECT_INTERACTION), typeof(GameObjectInteractionPacketHandler), typeof(GameLoginListener))]
|
|
public class GameObjectInteractionPacketHandler : PacketRecvHandler
|
|
{
|
|
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
|
{
|
|
await Task.CompletedTask;
|
|
var result = new Result();
|
|
|
|
var err_msg = string.Empty;
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
|
|
var player = session as Player;
|
|
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
|
|
|
var req_msg = recvMessage as ClientToGame;
|
|
ArgumentNullReferenceCheckHelper.throwIfNull(req_msg, () => $"req_msg is null !!! - {player.toBasicString()}");
|
|
|
|
var request = req_msg.Request.ReqGameObjectInteraction;
|
|
if (null == request)
|
|
{
|
|
err_msg = $"failed to get request message : Invalid Request message - {req_msg.Request.MsgCase}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(ServerErrorCode.InvalidArgument, err_msg);
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, "");
|
|
return result;
|
|
}
|
|
|
|
var anchor_guid = request.AnchorGuid;
|
|
ArgumentNullReferenceCheckHelper.throwIfNull(anchor_guid, () => $"anchor_guid is null !!! - {player.toBasicString()}");
|
|
var paacket_create_time = request.PacketCreateTime;
|
|
ArgumentNullReferenceCheckHelper.throwIfNull(paacket_create_time, () => $"paacket_create_time is null !!! - {player.toBasicString()}");
|
|
|
|
DateTime interaction_time = paacket_create_time.ToDateTime();
|
|
|
|
var room_id = player.getCurrentInstanceRoomId();
|
|
if(false == GameModeManager.It.tryGetGameMode(room_id, out var gameMode))
|
|
{
|
|
err_msg = $"gameMode is null : room_id - {room_id}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(ServerErrorCode.GameModeClassIsNull, err_msg);
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, anchor_guid);
|
|
return result;
|
|
}
|
|
|
|
|
|
var game_mode_base = gameMode as GameModeBase;
|
|
NullReferenceCheckHelper.throwIfNull(game_mode_base, () => $"game_moce_base is null !!!");
|
|
if (false == MapDataTable.Instance.getAnchor(anchor_guid, out var anchor))
|
|
{
|
|
err_msg = $"anchor_guid invalid : room_id - {room_id}, anchor_guid : {anchor_guid}, player : {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(ServerErrorCode.GameModeInvalidAnchorGuid, err_msg);
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, anchor_guid);
|
|
return result;
|
|
}
|
|
|
|
if(false == game_mode_base.getInstanceRoom().getMap().getAnchors().TryGetValue(anchor_guid, out var anchor2))
|
|
{
|
|
err_msg = $"anchor_guid invalid : room_id - {room_id}, anchor_guid : {anchor_guid}, player : {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(ServerErrorCode.GameModeInvalidAnchorGuid, err_msg);
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, anchor_guid);
|
|
return result;
|
|
}
|
|
|
|
var anchor_info = game_mode_base.getInstanceRoom().getMap().findAnchorInfo(anchor_guid);
|
|
if(anchor_info is null)
|
|
{
|
|
err_msg = $"anchor_guid invalid : room_id - {room_id}, anchor_guid : {anchor_guid}, player : {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(ServerErrorCode.GameModeInvalidAnchorGuid, err_msg);
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, anchor_guid);
|
|
return result;
|
|
}
|
|
|
|
var interact_action = GameModeHelper.getObjectInteractAction(game_mode_base, anchor); //kihoon todo : 어떤 anchor를 가져다 쓸지 추후 확인 필요
|
|
if (interact_action is null)
|
|
{
|
|
err_msg = $"anchor_guid invalid : room_id - {room_id}, anchor_guid : {anchor_guid}, player : {player.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(ServerErrorCode.GameModeInvalidAnchorGuid, err_msg);
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, anchor_guid);
|
|
return result;
|
|
}
|
|
|
|
result = await interact_action.interact(anchor_guid, interaction_time);
|
|
if (result.isFail())
|
|
{
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, anchor_guid);
|
|
return result;
|
|
}
|
|
|
|
send_S2C_ACK_GAME_OBJECT_INTERACTION(player, result, anchor_guid);
|
|
|
|
|
|
return result;
|
|
}
|
|
|
|
public bool send_S2C_ACK_GAME_OBJECT_INTERACTION(Player player, Result result, string anchorGuid)
|
|
{
|
|
var ack_packet = new ClientToGame();
|
|
ack_packet.Response = new ClientToGameRes();
|
|
|
|
ack_packet.Response.ErrorCode = result.ErrorCode;
|
|
ack_packet.Response.AckGameObjectInteraction = new ClientToGameRes.Types.GS2C_ACK_GAME_OBJECT_INTERACTION();
|
|
ack_packet.Response.AckGameObjectInteraction.AnchorGuid = anchorGuid;
|
|
|
|
return GameServerApp.getServerLogic().onSendPacket(player, ack_packet);
|
|
|
|
}
|
|
} |