using Microsoft.AspNetCore.Mvc; using ServerCommon; using ServerCore; using ServerBase; using System; using System.Collections.Generic; using System.Linq; using System.Net.WebSockets; using System.Text; using System.Threading.Tasks; using static ClientToGameMessage.Types; using static ServerMessage.Types; namespace GameServer { internal static class LandNotifyHelper { public static async Task send_S2C_NTF_LAND_INFOS(this Player player) { var server_logic = GameServerApp.getServerLogic(); var land_manager = server_logic.getLandManager(); var ntf_packet = new ClientToGame(); ntf_packet.Message = new ClientToGameMessage(); ntf_packet.Message.NtfLandInfos = new GS2C_NTF_LAND_INFOS(); var land_infos = await land_manager.getLandInfos(); foreach (var land_info in land_infos) { ntf_packet.Message.NtfLandInfos.LandInfos.Add(land_info.LandMetaId, land_info); } if (false == GameServerApp.getServerLogic().onSendPacket(player, ntf_packet)) { return false; } return true; } public static bool broadcast_S2C_NTF_LAND_INFOS(LandInfo landInfo) { var server_logic = GameServerApp.getServerLogic(); var users = server_logic.getPlayerManager().getUsers(); var players = users.Values.ToArray(); if (players.Length == 0) return true; var ntf_packet = new ClientToGame(); ntf_packet.Message = new ClientToGameMessage(); ntf_packet.Message.NtfLandInfos = new GS2C_NTF_LAND_INFOS(); ntf_packet.Message.NtfLandInfos.LandInfos.Add(landInfo.LandMetaId, landInfo); if (false == GameServerApp.getServerLogic().onSendPacket(players, ntf_packet)) { return false; } return true; } public static bool broadcast_S2C_NTF_LAND_INFOS(List landInfos) { var server_logic = GameServerApp.getServerLogic(); var users = server_logic.getPlayerManager().getUsers(); var players = users.Values.ToArray(); if (players.Length == 0) return true; var ntf_packet = new ClientToGame(); ntf_packet.Message = new ClientToGameMessage(); ntf_packet.Message.NtfLandInfos = new GS2C_NTF_LAND_INFOS(); foreach (var landInfo in landInfos) { ntf_packet.Message.NtfLandInfos.LandInfos.Add(landInfo.LandMetaId, landInfo); } if (false == GameServerApp.getServerLogic().onSendPacket(players, ntf_packet)) { return false; } return true; } public static bool send_GS2GS_NTF_MODIFY_LAND_INFO(List landInfos) { var server_logic = GameServerApp.getServerLogic(); var message = new ServerMessage(); message.NtfModifyLandInfo = new GS2GS_NTF_MODIFY_LAND_INFO(); message.NtfModifyLandInfo.ExceptServerName = server_logic.getServerName(); message.NtfModifyLandInfo.LandInfos.AddRange(landInfos); var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game; NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!"); rabbit_mq.sendMessageToExchangeAllGame(message); return true; } public static async Task sendNtfModifyLandInfo(Land land) { var land_info = await land.toLandInfo(); var land_infos = new List(); land_infos.Add(land_info); // 현재 서버 유저 broadcast_S2C_NTF_LAND_INFOS(land_info); // 다른 서버 send_GS2GS_NTF_MODIFY_LAND_INFO(land_infos); return true; } public static bool sendNtfModifyLandInfos(List landInfos) { broadcast_S2C_NTF_LAND_INFOS(landInfos); send_GS2GS_NTF_MODIFY_LAND_INFO(landInfos); return true; } } }