Files
caliverse_server/GameServer/MessageQueue/PacketHandler/NtfLandAuctionWinningBidMQPacketHandler.cs
2025-05-01 07:20:41 +09:00

132 lines
6.4 KiB
C#

using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
using META_ID = System.UInt32;
namespace GameServer.PacketHandler;
[PacketHandler("allgameserver", typeof(ServerMessage.Types.GS2GS_NTF_LAND_AUCTION_WINNING_BID), typeof(NtfLandAuctionWinningBidMQPacketHandler), typeof(RabbitMQ4Game))]
public class NtfLandAuctionWinningBidMQPacketHandler : PacketRecvHandler
{
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
{
var result = new Result();
var err_msg = string.Empty;
var msg = recvMessage as ServerMessage;
ArgumentNullException.ThrowIfNull(msg, $"msg is null !!!");
var ntf_land_auction_wiinning_bid = msg.NtfLandAuctionWinningBid;
ArgumentNullException.ThrowIfNull(ntf_land_auction_wiinning_bid, $"ntf_land_auction_wiinning_bid is null !!!");
var server_logic = GameServerApp.getServerLogic();
var db_connector = server_logic.getDynamoDbClient();
var player_manager = server_logic.getPlayerManager();
ArgumentNullException.ThrowIfNull(player_manager, $"player_manager is null !!!");
var wining_user_guid = ntf_land_auction_wiinning_bid.WinningUserGuid;
var winning_user_nickname = ntf_land_auction_wiinning_bid.WinningUserNickname;
var land_meta_id = ntf_land_auction_wiinning_bid.LandMetaId;
var buidling_meta_ids = ntf_land_auction_wiinning_bid.BuildingMetaIds;
var is_new_recv_mail = ntf_land_auction_wiinning_bid.IsNewRecvMail;
if (player_manager.tryGetUserByPrimaryKey(wining_user_guid, out var found_user) == true)
{
// 1. 낙찰된 랜드 정보 읽기
{
(result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey<OwnedLandDoc>(wining_user_guid, land_meta_id.ToString());
if (result.isFail())
{
err_msg = $"Failed to makePrimaryKey<OwnedLandDoc>() !!! : {result.toBasicString()} - landMetaId:{land_meta_id}";
Log.getLogger().error(err_msg);
return result;
}
NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!");
var query_config = db_connector.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK);
(result, var read_doc) = await db_connector.simpleQueryDocTypeWithQueryOperationConfig<OwnedLandDoc>(query_config);
if (result.isFail())
{
err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig<OwnedLandDoc>() !!! : {result.toBasicString()} - {found_user.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
NullReferenceCheckHelper.throwIfNull(read_doc, () => $"read_doc is null !!! - {found_user.toBasicString()}");
var owned_land_agent_action = found_user.getEntityAction<OwnedLandAgentAction>();
NullReferenceCheckHelper.throwIfNull(owned_land_agent_action, () => $"owned_land_agent_action is null !!! - {found_user.toBasicString()}");
result = await owned_land_agent_action.tryAddOwnedLandFromDoc(read_doc);
if (result.isFail())
{
err_msg = $"Failed to tryAddOwnedLandFromDoc() !!! : {result.toBasicString()} - {found_user.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
}
// 2. 랜드와 연결된 빌딩 정보 읽기
{
foreach(var building_meta_id in buidling_meta_ids)
{
(result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey<OwnedBuildingDoc>(wining_user_guid, building_meta_id.ToString());
if (result.isFail())
{
err_msg = $"Failed to makePrimaryKey<OwnedBuildingDoc>() !!! : {result.toBasicString()} - landMetaId:{building_meta_id}";
Log.getLogger().error(err_msg);
return result;
}
NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!");
var query_config = db_connector.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK);
(result, var read_doc) = await db_connector.simpleQueryDocTypeWithQueryOperationConfig<OwnedBuildingDoc>(query_config);
if (result.isFail())
{
err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig<OwnedBuildingDoc>() !!! : {result.toBasicString()} - {found_user.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
NullReferenceCheckHelper.throwIfNull(read_doc, () => $"read_doc is null !!! - {found_user.toBasicString()}");
var owned_building_agent_action = found_user.getEntityAction<OwnedBuildingAgentAction>();
NullReferenceCheckHelper.throwIfNull(owned_building_agent_action, () => $"owned_building_agent_action is null !!!");
result = await owned_building_agent_action.tryAddOwnedBuildingFromDoc(read_doc);
if (result.isFail())
{
err_msg = $"Failed to tryAddOwnedBuildingFromDoc() !!! : {result.toBasicString()} - {found_user.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
}
}
found_user.send_S2C_NTF_OWNED_LAND_INFOS();
found_user.send_S2C_NTF_OWNED_BUILDING_INFOS();
if(BoolType.True == is_new_recv_mail)
{
var found_user_mail_action = found_user.getEntityAction<MailAction>();
NullReferenceCheckHelper.throwIfNull(found_user_mail_action, () => $"found_user_mail_action is null !!!");
found_user_mail_action.NewReceivedMail();
}
}
LandAuctionNotifyHelper.broadcast_GS2C_NTF_LAND_AUCTION_WINNING_BID(winning_user_nickname, (META_ID)land_meta_id);
return await Task.FromResult(result);
}
}