using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer; public class ReplyReceivedFriendRequestAction : EntityActionBase { public ReplyReceivedFriendRequestAction(Player owner) : base(owner) { } public override async Task onInit() { var result = new Result(); return await Task.FromResult(result); } public override void onClear() { return; } public async Task replyReceivedFriendRequest(string myGuid, string targetGuid, int replyType) { var result = new Result(); switch (replyType) { case (int)FriendRequestReplyType.Accept: result = await addFriend(myGuid, targetGuid); if (result.isFail()) { Log.getLogger().error("replyReceivedFriendRequest addFriend error"); return result; } break; case (int)FriendRequestReplyType.Refuse: result = await refuseFriend(myGuid, targetGuid); if (result.isFail()) { Log.getLogger().error("replyReceivedFriendRequest refuseFriend error"); return result; } break; } return result; } private async Task addFriend(string myGuid, string friendGuid) { var owner = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); var friend_agent_action = owner.getEntityAction(); var result = friend_agent_action.friendMaxCountCheck(); if (result.isFail()) return result; result = friend_agent_action.raiseErrorIfExistFriend(friendGuid); if (result.isFail()) return result; var server_logic = GameServerApp.getServerLogic(); var friend_request_cache = new FriendReqCacheRequest(owner, myGuid, friendGuid, server_logic.getRedisConnector()); //요청이 존재하는지 체크하면서 해당 요청 가져온다. (result, var req) = await friend_agent_action.receivedRquestsExitstCheck(friend_request_cache, friendGuid); if (result.isFail() || req is null) return result; //요청 만료시간이 지나버린경우 DateTime now = DateTimeHelper.Current; var expire_time = req.m_request_time.AddSeconds(MetaHelper.GameConfigMeta.SentFriendRequestValidTime); if (now > expire_time) { var err_msg = $"friendRequestList expired targetGuid = {friendGuid}, m_request_time = {req.m_request_time}, expire_time : {expire_time}, now : {now}, {owner.toBasicString()}"; result.setFail(ServerErrorCode.AddFriendAlreadyExpired, err_msg); Log.getLogger().error(result.toBasicString()); return result; } result = await friend_request_cache.deleteFriendByReply(); if (result.isFail()) return result; return result; } private async Task refuseFriend(string myGuidm, string friendGuid) { var owner = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); var server_logic = GameServerApp.getServerLogic(); FriendReqCacheRequest cache = new FriendReqCacheRequest(owner, myGuidm, friendGuid, server_logic.getRedisConnector()); var result = await cache.refuseFriendRequest(); return result; } }