using Nettention.Proud; using OtpNet; using ServerCommon; using ServerCommon.BusinessLogDomain; using ServerCore; using ServerBase; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static ClientToLoginMessage.Types; namespace GameServer { public class KickFriendsFromMyHomeAction : EntityActionBase { public KickFriendsFromMyHomeAction(EntityBase owner) : base(owner) { } public override Task onInit() { var result = new Result(); return Task.FromResult(result); } public override void onClear() { return; } public async Task setKickableFriendsInfo(KickFriendResult kickFriendResult) { var owner = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(owner, () => "Player is null !!!"); var location_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(location_attribute, () => $"LocationAttribute is null !!! - player:{owner.toBasicString()}"); var myhome_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(myhome_action, () => $"FriendInviteMyhomeAction is null !!! - player:{owner.toBasicString()}"); var myhome_location = location_attribute.CurrentIndunLocation; var instance_room_Id = myhome_location.InstanceRoomId; var instance_meta_Id = myhome_location.InstanceMetaId; var result = myhome_action.isCurrentLocationMyHome(instance_meta_Id); if (result.isFail()) return result; InstanceRoomStorage room_storage = new InstanceRoomStorage(); room_storage.Init(GameServerApp.getServerLogic().getRedisDb(), string.Empty); InstanceRoomInfo? instance_room = await room_storage.GetInstanceRoomInfo(instance_room_Id); if (instance_room == null) { string err_msg = $"{owner.getAccountId()} Not found InstanceRoomInfo. InstanceRoomId:{instance_room_Id}"; result.setFail(ServerErrorCode.NotExistInstanceRoom, err_msg); return result; } List room_members = await room_storage.GetInstanceRoomMemberList(instance_room.roomId); foreach (string member in room_members) { if (member.Equals(owner.getAccountId())) continue; kickFriendResult.getNeedNotiMembers().Add(member); } if (kickFriendResult.getNeedNotiMembers().Count == 0) { string err_msg = $"Room member count is zero. InstanceRoomId:{instance_room_Id}"; result.setFail(ServerErrorCode.FriendKickMemberNotExist, err_msg); return result; } return result; } public async Task sendKickNoti(KickFriendResult kickFriendResult) { //noti 보내야한다. await Task.Delay(3000); var result = new Result(); var server_logic = GameServerApp.getServerLogic(); var plyaer_manager = server_logic.getPlayerManager(); foreach (var member in kickFriendResult.getNeedNotiMembers()) { if(false == plyaer_manager.tryGetUserByPrimaryKey(member, out var player)) { string err_msg = $"Not found player. member:{member}"; Log.getLogger().warn(err_msg); continue; } //noti 전송 send_GS2C_NTF_SERVER_INFO_BY_FRIEND_KICKED_NOTI(player); } return result; } private bool send_GS2C_NTF_SERVER_INFO_BY_FRIEND_KICKED_NOTI(Player player) { ClientToGame msg = new ClientToGame(); msg.Message = new ClientToGameMessage(); msg.Message.ServerInfoByFriendKickedNoti = new(); msg.Message.ServerInfoByFriendKickedNoti.ServerInfo = new ServerConnectInfo { ServerAddr = string.Empty, ServerPort = 0, Otp = string.Empty }; if (false == GameServerApp.getServerLogic().onSendPacket(player, msg)) return false; return true; } public void kickFriendsFromMyHome() { string err_msg = $"need code implement !!!!"; Log.getLogger().error(err_msg); } } public class KickFriendResult { List m_need_noti_members = new(); List m_error_member = new(); public List getErrorMembers() { return m_error_member; } public List getNeedNotiMembers() { return m_need_noti_members; } } }