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 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(wining_user_guid, land_meta_id.ToString()); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {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(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {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(); 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(wining_user_guid, building_meta_id.ToString()); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {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(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {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(); 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(); 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); } }