using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer.PacketHandler; [PacketHandler("allgameserver", typeof(ServerMessage.Types.GS2GS_NTF_MODIFY_LAND_INFO), typeof(NtfModifyLandInfoMQPacketHandler), typeof(RabbitMQ4Game))] internal class NtfModifyLandInfoMQPacketHandler : PacketRecvHandler { public override async Task onProcessPacket(ISession session, IMessage recvMessage) { var result = new Result(); var err_msg = string.Empty; var server_logic = GameServerApp.getServerLogic(); var message = recvMessage as ServerMessage; ArgumentNullException.ThrowIfNull(message, $"message is null !!!"); var ntf_modify_land_info = message.NtfModifyLandInfo; if (ntf_modify_land_info.ExceptServerName == server_logic.getServerName()) return result; Log.getLogger().info($"MQ - NtfModifyLandInfos"); var land_infos = ntf_modify_land_info.LandInfos.ToList(); foreach (var land_info in land_infos) { if (!MapManager.Instance.GetLandMapTree(land_info.LandMetaId, out var land_map_tree)) { err_msg = $"Failed to GetLandMapTree() !!! : LandMetaId:{land_info.LandMetaId}"; result.setFail(ServerErrorCode.LandMapTreeDataNotFound, err_msg); Log.getLogger().error(result.toBasicString()); return result; } var land_manager = server_logic.getLandManager(); if (!land_manager.tryGetLand(land_info.LandMetaId, out var land)) { err_msg = $"Failed to tryGetLand() !!! : landMetaId:{land_info.LandMetaId}"; result.setFail(ServerErrorCode.LandNotFound, err_msg); Log.getLogger().error(result.toBasicString()); return result; } var land_action = land.getEntityAction(); ArgumentNullReferenceCheckHelper.throwIfNull(land_action, () => $"land_action is null !!!"); // 랜드 정보 수정 land_action.modifyLandInfo(land_info); } LandNotifyHelper.broadcast_S2C_NTF_LAND_INFOS(land_infos); return await Task.FromResult(result); } }