using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; namespace GameServer.PacketHandler; [PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.KickFriendsFromMyHomeReq), typeof(KickFriendsFromMyHomePacketHandler), typeof(GameLoginListener))] public class KickFriendsFromMyHomePacketHandler : PacketRecvHandler { public override async Task onProcessPacket(ISession session, IMessage recvMessage) { var owner = session as Player; NullReferenceCheckHelper.throwIfNull(owner, () => "Player is null !!!"); var my_guid = owner.getUserGuid(); var kick_friend_from_myhome_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(kick_friend_from_myhome_action, () => $"KickFriendsFromMyHomeAction is null !!! - player:{owner.toBasicString()}"); KickFriendResult kick_friend_result = new(); var result = await kick_friend_from_myhome_action.setKickableFriendsInfo(kick_friend_result); if (result.isFail()) { send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(owner, result); return result; } send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(owner, result, kick_friend_result); await kick_friend_from_myhome_action.sendKickNoti(kick_friend_result); //log List invokers = new List(); invokers.Add(new KickFriendFromMyhomeBusinessLog(kick_friend_result)); var log_action = new LogActionEx(LogActionType.KickFriendsFromMyhome); BusinessLogger.collectLogs(log_action, owner, invokers); return result; } private static bool send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(Player owner, Result result, KickFriendResult kickFriendResult) { ClientToGame ack_packet = new(); ack_packet.Response = new(); ack_packet.Response.ErrorCode = result.ErrorCode; ack_packet.Response.KickFriendsFromMyHomeRes = new(); ack_packet.Response.KickFriendsFromMyHomeRes.FailInfos.AddRange(kickFriendResult.getErrorMembers()); ack_packet.Response.KickFriendsFromMyHomeRes.SuccessGuids.AddRange(kickFriendResult.getNeedNotiMembers()); if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false; return true; } private static bool send_GS2C_ACK_KICK_FRIENDS_FROM_MYHOME(Player owner, Result result) { ClientToGame ack_packet = new(); ack_packet.Response = new(); ack_packet.Response.ErrorCode = result.ErrorCode; ack_packet.Response.KickFriendsFromMyHomeRes = new(); if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false; return true; } }