using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer.PacketHandler; [PacketHandler("", typeof(ServerMessage.Types.FriendAcceptNoti), typeof(NtfFriendAcceptMQPacketHandler), typeof(RabbitMQ4Game))] public class NtfFriendAcceptMQPacketHandler : PacketRecvHandler { public override async Task onProcessPacket(ISession session, IMessage recvMessage) { var msg = recvMessage as ServerMessage; ArgumentNullException.ThrowIfNull(msg); var result = new Result(); var player_manager = GameServerApp.getServerLogic().getPlayerManager(); ArgumentNullException.ThrowIfNull(player_manager); if (false == player_manager.tryGetUserByPrimaryKey(msg.FriendAcceptNoti.ReceiverGuid, out var player)) { var err_msg = $"{msg.FriendAcceptNoti.ReceiverGuid} user not exist this Server"; result.setFail(ServerErrorCode.UserNotLogin, err_msg); Log.getLogger().warn(result.toBasicString()); return result; } var friend_agent_action = player.getEntityAction(); ArgumentNullException.ThrowIfNull(friend_agent_action, $"friend_agent_action is null !!!"); //신규 친구에 대한 로드 await friend_agent_action.loadFriends(); var handler = new NotifyReplyFriendRequestHandler(); handler.send_GS2C_NTF_FRIEND_ACCEPT(player, msg.FriendAcceptNoti); if (msg.FriendAcceptNoti.AcceptOrRefuse == 1) { //수락인 경우 퀘스트 체크 QuestManager.It.QuestCheck(player, new QuestFriend(EQuestEventTargetType.FRIEND, EQuestEventNameType.ADDED)).Wait(); //수락인 경우 상대방에게 내 stateNoti await player.send_GS2CS_NTF_STATE_TO_FRIEND(msg.FriendAcceptNoti.SenderGuid); } return result; } }