using Org.BouncyCastle.Asn1.Ocsp; using ServerCommon; using ServerCore; using ServerBase; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static ClientToGameMessage.Types; using static ServerMessage.Types; namespace GameServer { internal static class MapNotifyHelper { public static bool send_S2C_NTF_MAP_LINKED_INFOS(this Player player) { var result = new Result(); var err_msg = string.Empty; var ntf_packet = new ClientToGame(); ntf_packet.Message = new ClientToGameMessage(); ntf_packet.Message.NtfMapLinkedInfos = new GS2C_NTF_MAP_LINKED_INFOS(); var server_logic = GameServerApp.getServerLogic(); if (server_logic.getServerType().toServerType() == ServerType.Channel) { var world_meta_id = server_logic.getMap().MapMId; if (!MetaData.Instance._WorldMetaTable.TryGetValue(world_meta_id, out var world_meta_data)) { err_msg = $"Failed to MetaData.TryGetValue() !!! : worldMetaId:{world_meta_id} - {player.toBasicString()}"; result.setFail(ServerErrorCode.WorldMetaDataNotFound, err_msg); Log.getLogger().error(result.toBasicString()); return false; } if (!MapManager.Instance.GetWorldMapTree(world_meta_data.MapPath, out var world_map_tree)) { err_msg = $"Failed to GetWorldMapTree() !!! : MapPath:{world_meta_data.MapPath} - {player.toBasicString()}"; result.setFail(ServerErrorCode.WorldMapTreeDataNotFound, err_msg); Log.getLogger().error(result.toBasicString()); return false; } foreach (var land_map_tree in world_map_tree.ChildLandMapTrees.Values) { if (!MetaData.Instance._LandTable.TryGetValue(land_map_tree.LandId, out var land_meta_data)) { err_msg = $"Failed to MetaData.TryGetValue() !!! : landMetaId:{land_map_tree.LandId} - {player.toBasicString()}"; result.setFail(ServerErrorCode.LandMetaDataNotFound, err_msg); Log.getLogger().error(result.toBasicString()); continue; } if (land_meta_data.LandType != MetaAssets.LandType.RENTAL) continue; var building_map_tree = land_map_tree.ChildBuildingMapTree; if (building_map_tree == null) continue; if (!MetaData.Instance._BuildingTable.TryGetValue(building_map_tree.BuildingMetaId, out var building_meta_data)) { err_msg = $"Failed to MetaData.TryGetValue() !!! : buildingMetaId:{building_map_tree.BuildingMetaId} - {player.toBasicString()}"; result.setFail(ServerErrorCode.BuildingMetaDataNotFound, err_msg); Log.getLogger().error(result.toBasicString()); continue; } var land_linked_info = new LandLinkedInfo(); land_linked_info.LandId = land_map_tree.LandId; foreach (var (floor, room_map_tree) in building_map_tree.ChildRoomMapTrees) { var floor_linked_info = new FloorLinkedInfo(); floor_linked_info.UgcNpcGuids.AddRange(room_map_tree.UgcNpcs); land_linked_info.FloorLinkedInfos.TryAdd(floor, floor_linked_info); } ntf_packet.Message.NtfMapLinkedInfos.LandLinkedInfos.Add(land_linked_info); } } if (false == GameServerApp.getServerLogic().onSendPacket(player, ntf_packet)) { return false; } return true; } public static bool broadcast_S2C_NTF_MODIFY_FLOOR_LINKED_INFOS(List modifyFloorLinkedInfos) { var server_logic = GameServerApp.getServerLogic(); var users = server_logic.getPlayerManager().getUsers(); var players = users.Values.ToArray(); if (players.Length == 0) return true; if (modifyFloorLinkedInfos.Count < 1) return true; var ntf_packet = new ClientToGame(); ntf_packet.Message = new ClientToGameMessage(); ntf_packet.Message.NtfModifyFloorLinkedInfos = new GS2C_NTF_MODIFY_FLOOR_LINKED_INFOS(); ntf_packet.Message.NtfModifyFloorLinkedInfos.ModifyFloorLinkedInfos.AddRange(modifyFloorLinkedInfos); if (false == GameServerApp.getServerLogic().onSendPacket(players, ntf_packet)) { return false; } return true; } public static bool send_GS2GS_NTF_MODIFY_FLOOR_LINKED_INFOS(List modifyFloorLinkedInfos) { var server_logic = GameServerApp.getServerLogic(); if (modifyFloorLinkedInfos.Count < 1) return true; var message = new ServerMessage(); message.NtfModifyFloorLinkedInfos = new GS2GS_NTF_MODIFY_FLOOR_LINKED_INFOS(); message.NtfModifyFloorLinkedInfos.ExceptServerName = server_logic.getServerName(); message.NtfModifyFloorLinkedInfos.ModifyFloorLinkedInfos.AddRange(modifyFloorLinkedInfos); var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game; NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!"); rabbit_mq.sendMessageToExchangeAllGame(message); return true; } public static bool sendNtfModifyFloorLinkedInfos(List modifyFloorLinkedInfos) { // 현재 서버 유저 broadcast_S2C_NTF_MODIFY_FLOOR_LINKED_INFOS(modifyFloorLinkedInfos); // 다른 서버 send_GS2GS_NTF_MODIFY_FLOOR_LINKED_INFOS(modifyFloorLinkedInfos); return true; } } }