diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/UpPracticeLevelHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/UpPracticeLevelHandler.java index b0cb2d5de..301b89437 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/UpPracticeLevelHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/UpPracticeLevelHandler.java @@ -1,6 +1,5 @@ package com.ljsd.jieling.handler.hero; -import com.google.protobuf.GeneratedMessage; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.globals.BIReason; @@ -12,21 +11,15 @@ import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hardStage.HardStageLogic; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.network.session.ISession; -import com.ljsd.jieling.util.CBean2Proto; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; -import config.SPlayerSkill; import config.SXiuXian; import config.SXiuXianSkill; import manager.STableManager; import org.springframework.stereotype.Component; -import rpc.protocols.CommonProto; import rpc.protocols.HeroInfoProto; import rpc.protocols.MessageTypeProto; -import java.util.List; -import java.util.Map; - /** * @Author hj * @Description 修行玩法,升级 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java index 9dcd0d624..d322ff6cc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java @@ -135,8 +135,8 @@ public class FriendLogic { if (!checkIsAllowRecommandFriend(friendManager, recommandId,recommondIds)){ continue; } - User recommandIdUser = UserManager.getUserInMem(recommandId); - if(recommandFriends== null||recommandIdUser==null){ + User recommandIdUser = UserManager.getUserNotCache(recommandId); + if(recommandIdUser == null){ continue; } if(recommandIdUser.getFriendManager().getBlackFriends().contains(uid)){ @@ -258,7 +258,7 @@ public class FriendLogic { if (friends.contains(inviteUid)){ continue; } - User inviteUser = UserManager.getUser(inviteUid); + User inviteUser = UserManager.getUserNotCache(inviteUid); if (inviteUser == null){ continue; } @@ -295,11 +295,14 @@ public class FriendLogic { * 在线好友申请推送 * @param inviteUid */ - private void sendFriendInfoIndication(int uid,int inviteUid,int type) throws Exception { + private void sendFriendInfoIndication(int uid,int inviteUid,int type){ boolean isOnline = OnlineUserManager.checkUidOnline(inviteUid); if (isOnline) { ISession session = OnlineUserManager.getSessionByUid(inviteUid); - User user = UserManager.getUser(inviteUid); + User user = UserManager.getUserNotCache(inviteUid); + if (user == null){ + return; + } PlayerInfoProto.sendFriendInfoIndication.Builder sendFriendInfoIndication = PlayerInfoProto.sendFriendInfoIndication.newBuilder(); sendFriendInfoIndication.setType(type); sendFriendInfoIndication.setFriends(CBean2Proto.getFriendInfo(uid, user.getFriendManager())); @@ -329,12 +332,11 @@ public class FriendLogic { int uid = iSession.getUid(); User user = UserManager.getUser(uid); FriendManager friendManager = user.getFriendManager(); - User friendUser = null; - FriendManager friendfriendManager = null; - if(friendId!=0){ - friendUser = UserManager.getUser(friendId); - friendfriendManager = friendUser.getFriendManager(); + User friendUser = UserManager.getUserNotCache(friendId); + if (friendId == 0 || friendUser == null){ + return; } + FriendManager friendManager1 = friendUser.getFriendManager(); List friends = friendManager.getFriends(); List applyFriends = friendManager.getApplyFriends(); int maxFriends = SSpecialConfig.getIntegerValue(SSpecialConfig.FRIENDAMOUNT_LIMIT); @@ -349,28 +351,28 @@ public class FriendLogic { } if(friendManager.getBlackFriends().contains(friendId)){ friendManager.delApplyFriend(friendId); - friendfriendManager.delMyApplyFriend(uid); + friendManager1.delMyApplyFriend(uid); throw new ErrorCodeException(ErrorCode.IN_BLACK); } - friendFriendList = friendfriendManager.getFriends(); + friendFriendList = friendManager1.getFriends(); if (friendFriendList.size() >=maxFriends){ throw new ErrorCodeException(ErrorCode.FRIENDS_SIDE_MAX); } - if(friendfriendManager.getBlackFriends().contains(uid)){ + if(friendManager1.getBlackFriends().contains(uid)){ throw new ErrorCodeException(ErrorCode.FRIENDS_SIDE_BLACK); } if (applyFriends.contains(friendId)){ friendManager.delApplyFriend(friendId); - friendfriendManager.delMyApplyFriend(uid); + friendManager1.delMyApplyFriend(uid); } - if (friendfriendManager.getApplyFriends().contains(uid)||applyFriends.contains(friendId)){ - friendfriendManager.delApplyFriend(uid); + if (friendManager1.getApplyFriends().contains(uid)||applyFriends.contains(friendId)){ + friendManager1.delApplyFriend(uid); friendManager.delMyApplyFriend(friendId); } friendManager.addFriendId(friendId); - friendfriendManager.addFriendId(uid); + friendManager1.addFriendId(uid); - initFriendGriveAndRreward(friendId, uid, friendManager, friendfriendManager); + initFriendGriveAndRreward(friendId, uid, friendManager, friendManager1); sendFriendInfoIndication(uid,friendId,2); user.getUserMissionManager().onGameEvent(user,GameEvent.FRIEND_NUMS,1); updateFriendUserInfo(friendUser); @@ -379,7 +381,7 @@ public class FriendLogic { applyFriends = friendManager.getApplyFriends(); if (applyFriends.contains(friendId)){ friendManager.delApplyFriend(friendId); - friendfriendManager.delMyApplyFriend(uid); + friendManager1.delMyApplyFriend(uid); } break; case 3://全部同意 @@ -406,38 +408,36 @@ public class FriendLogic { } private int allApplyFriend(int uid, FriendManager friendManager, List friends, List applyFriends, int maxFriends) throws Exception { - User friendUser; - FriendManager friendfriendManager; - List friendFriendList; List alreadyFriendList = new ArrayList<>(); int nums =0; - for (Integer applyfriendId :applyFriends){ - friendUser = UserManager.getUser(applyfriendId); - friendfriendManager = friendUser.getFriendManager(); - friendFriendList = friendfriendManager.getFriends(); - if (friends.contains(applyfriendId)){ + for (Integer applyFriendId :applyFriends){ + User friendUser = UserManager.getUserNotCache(applyFriendId); + if (friendUser == null){ continue; } - if(friendManager.getBlackFriends().contains(applyfriendId)){ + FriendManager friendManager1 = friendUser.getFriendManager(); + List friendFriendList = friendManager1.getFriends(); + if (friends.contains(applyFriendId)){ + continue; + } + if(friendManager.getBlackFriends().contains(applyFriendId)){ continue; } if (friends.size()+1> maxFriends){ -// throw new ErrorCodeException(ErrorCode.FRIENDS_MAX); continue; } if (friendFriendList.size()>= maxFriends){ continue; } - alreadyFriendList.add(applyfriendId); -// friendManager.delApplyFriend(applyfriendId); - friendfriendManager.addFriendId(uid); - friendManager.addFriendId(applyfriendId); - UserManager.getUser(applyfriendId).getFriendManager().delMyApplyFriend(uid); - initFriendGriveAndRreward(applyfriendId, uid, friendManager, friendfriendManager); - sendFriendInfoIndication(uid,applyfriendId,2); + alreadyFriendList.add(applyFriendId); + friendManager1.addFriendId(uid); + friendManager.addFriendId(applyFriendId); + friendManager1.delMyApplyFriend(uid); + initFriendGriveAndRreward(applyFriendId, uid, friendManager, friendManager1); + sendFriendInfoIndication(uid,applyFriendId,2); updateFriendUserInfo(friendUser); nums++; - ReportUtil.onReportEvent(UserManager.getUser(uid),ReportEventEnum.ALLOW_FRIENDS_ASK.getType(),String.valueOf(applyfriendId),friendUser.getPlayerInfoManager().getNickName(),friendUser.getPlayerInfoManager().getLevel()); + ReportUtil.onReportEvent(UserManager.getUser(uid),ReportEventEnum.ALLOW_FRIENDS_ASK.getType(),String.valueOf(applyFriendId),friendUser.getPlayerInfoManager().getNickName(),friendUser.getPlayerInfoManager().getLevel()); } if(!alreadyFriendList.isEmpty()){ for(Integer id:alreadyFriendList){ @@ -480,12 +480,13 @@ public class FriendLogic { if (!friends.contains(friendId)){ throw new ErrorCodeException(ErrorCode.FRIENDS_ISNOT_FRIEND); } - User friendUser = UserManager.getUser(friendId); + User friendUser = UserManager.getUserNotCache(friendId); + if (friendUser == null){ + throw new ErrorCodeException(ErrorCode.FRIENDS_ISNOT_FRIEND); + } FriendManager friendManager1 = friendUser.getFriendManager(); delFriendInfo(friendId, uid, friendManager, friendManager1); sendFriendStatedication(uid,friendId,1); - // 删除助战 -// HelpHeroLogic.getInstance().delFriendClearHelp(user,friendUser); MessageUtil.sendMessage(iSession, 1, msgId, null, true); } @@ -506,10 +507,12 @@ public class FriendLogic { } List friends = friendManager.getFriends(); if (friends.contains(friendId)){ - User friendUser = UserManager.getUser(friendId); - FriendManager friendManager1 = friendUser.getFriendManager(); - delFriendInfo(friendId, uid, friendManager, friendManager1); - sendFriendStatedication(uid,friendId,1); + User friendUser = UserManager.getUserNotCache(friendId); + if (friendUser != null){ + FriendManager friendManager1 = friendUser.getFriendManager(); + delFriendInfo(friendId, uid, friendManager, friendManager1); + sendFriendStatedication(uid,friendId,1); + } } friendManager.addBlackFriendId(friendId); }else if(optType == 2){ @@ -543,47 +546,37 @@ public class FriendLogic { FriendManager friendManager = user.getFriendManager(); List friends = friendManager.getFriends(); Map giveMap = friendManager.getGiveMap(); + + // 获取全部未赠送得好友 + ArrayList notGive = new ArrayList<>(); + for (Integer friend : friends) { + if (giveMap.get(friend) == 1){ + continue; + } + notGive.add(friend); + } + // 住过致送一个人,则清空,值添加一个 + if (type == 1 && notGive.contains(friendId)){ + notGive.clear(); + notGive.add(friendId); + } + // 记录赠送次数 int times = 0; - if (type == 1) {//赠送一个人 - if (!friends.contains(friendId)) { - throw new ErrorCodeException(ErrorCode.FRIENDS_ISNOT_FRIEND); - } - if (giveMap.get(friendId) == 1) { - throw new ErrorCodeException(ErrorCode.FRIENDS_SEMD_YET); - } - User friendUser = UserManager.getUser(friendId); - FriendManager friendManager1 = friendUser.getFriendManager(); - Map haveRewardMap = friendUser.getFriendManager().getHaveRewardMap(); - if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) { - throw new ErrorCodeException(ErrorCode.FRIENDS_SEMD_YET); - } - friendManager.updateGiveMap(friendId,1); -// boolean check = PlayerLogic.getInstance().checkAndUpdate(user,STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getMaxEnergyGet(), 1); -// if(check){ - friendManager1.updateHaveRewardMap(uid,1); - sendFriendStatedication(uid,friendId,2); -// } - times++; - }else{ //赠送全部好友 - for (Integer friendUserId : friends) { - if (giveMap.get(friendUserId) == 1) { - continue; - } - User friendUser = UserManager.getUser(friendUserId); + for (Integer friendUid : notGive) { + User friendUser = UserManager.getUserNotCache(friendUid); + if (friendUser != null){ FriendManager friendManager1 = friendUser.getFriendManager(); Map haveRewardMap = friendManager1.getHaveRewardMap(); if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) { - continue; + throw new ErrorCodeException(ErrorCode.FRIENDS_SEMD_YET); } - friendManager.updateGiveMap(friendUserId,1); -// boolean check = PlayerLogic.getInstance().checkAndUpdate(user,STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getMaxEnergyGet(), 1); -// if(check){ + friendManager.updateGiveMap(friendId,1); friendManager1.updateHaveRewardMap(uid,1); - sendFriendStatedication(uid,friendUserId,2); -// } + sendFriendStatedication(uid,friendId,2); times++; } } + user.getUserMissionManager().onGameEvent(user, GameEvent.GIVE_PRESENT,times); MessageUtil.sendMessage(iSession, 1, msgId, null, true); } @@ -671,22 +664,21 @@ public class FriendLogic { PlayerManager playerInfoManager = user.getPlayerInfoManager(); FriendManager friendManager = user.getFriendManager(); List friends = friendManager.getFriends(); -// boolean result = ShieldedWordUtils.checkName( name); -// if (!result) { -// MessageUtil.sendErrorResponse(iSession, 0, msgId, "名字不合法"); -// return; -// } if (playerInfoManager.getNickName().equals(name)){ throw new ErrorCodeException(ErrorCode.FRIENDS_SEARCH_SELF); } String key = RedisKey.getKey(RedisKey.C_User_Name_Key, name, false); - Object friend = RedisUtil.getInstence().get(key); - if (friend == null){ + Object friendIds = RedisUtil.getInstence().get(key); + if (friendIds == null){ throw new ErrorCodeException(ErrorCode.FRIENDS_USER_NULL); } int type = 1; - int friendId = Integer.parseInt(friend.toString()); - List applyFriends = UserManager.getUser(friendId).getFriendManager().getApplyFriends(); + int friendId = Integer.parseInt(friendIds.toString()); + User friend = UserManager.getUserNotCache(friendId); + if (friend == null){ + throw new ErrorCodeException(ErrorCode.FRIENDS_USER_NULL); + } + List applyFriends = friend.getFriendManager().getApplyFriends(); if (friends.contains(friendId)){ type = 2; }else if (applyFriends.contains(friendId)){ @@ -713,13 +705,7 @@ public class FriendLogic { friendManager.setHaveRewardMap(new HashMap<>()); for (Map.Entry entry: giveMap.entrySet()){ Integer friendId = entry.getKey(); - User friendUser = null; - try { - friendUser = UserManager.getUser(friendId); - }catch (Exception e){ - LOGGER.info("获取好友信息报错,friendId当前:{}",friendId); - e.printStackTrace(); - } + User friendUser = UserManager.getUserNotCache(friendId); if (friendUser == null){ continue; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index be3ebc913..753410255 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -809,10 +809,10 @@ public class CBean2Proto { } - public static CommonProto.Friend getFriendInfo(int friendId, FriendManager friendManager) throws Exception { + public static CommonProto.Friend getFriendInfo(int friendId, FriendManager friendManager){ User user = null; try { - user = UserManager.getUser(friendId); + user = UserManager.getUserNotCache(friendId); } catch (Exception e) { LOGGER.info("getFriendInfo user == null friendId={} e={}", friendId, e.toString()); }