好友获取优化

duhui 2021-11-07 10:43:49 +08:00
parent 0692f312fa
commit 182244cfb0
3 changed files with 80 additions and 101 deletions

View File

@ -1,6 +1,5 @@
package com.ljsd.jieling.handler.hero; package com.ljsd.jieling.handler.hero;
import com.google.protobuf.GeneratedMessage;
import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason; 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.hardStage.HardStageLogic;
import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.MessageUtil;
import config.SPlayerSkill;
import config.SXiuXian; import config.SXiuXian;
import config.SXiuXianSkill; import config.SXiuXianSkill;
import manager.STableManager; import manager.STableManager;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import rpc.protocols.CommonProto;
import rpc.protocols.HeroInfoProto; import rpc.protocols.HeroInfoProto;
import rpc.protocols.MessageTypeProto; import rpc.protocols.MessageTypeProto;
import java.util.List;
import java.util.Map;
/** /**
* @Author hj * @Author hj
* @Description , * @Description ,

View File

@ -135,8 +135,8 @@ public class FriendLogic {
if (!checkIsAllowRecommandFriend(friendManager, recommandId,recommondIds)){ if (!checkIsAllowRecommandFriend(friendManager, recommandId,recommondIds)){
continue; continue;
} }
User recommandIdUser = UserManager.getUserInMem(recommandId); User recommandIdUser = UserManager.getUserNotCache(recommandId);
if(recommandFriends== null||recommandIdUser==null){ if(recommandIdUser == null){
continue; continue;
} }
if(recommandIdUser.getFriendManager().getBlackFriends().contains(uid)){ if(recommandIdUser.getFriendManager().getBlackFriends().contains(uid)){
@ -258,7 +258,7 @@ public class FriendLogic {
if (friends.contains(inviteUid)){ if (friends.contains(inviteUid)){
continue; continue;
} }
User inviteUser = UserManager.getUser(inviteUid); User inviteUser = UserManager.getUserNotCache(inviteUid);
if (inviteUser == null){ if (inviteUser == null){
continue; continue;
} }
@ -295,11 +295,14 @@ public class FriendLogic {
* 线 * 线
* @param inviteUid * @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); boolean isOnline = OnlineUserManager.checkUidOnline(inviteUid);
if (isOnline) { if (isOnline) {
ISession session = OnlineUserManager.getSessionByUid(inviteUid); 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(); PlayerInfoProto.sendFriendInfoIndication.Builder sendFriendInfoIndication = PlayerInfoProto.sendFriendInfoIndication.newBuilder();
sendFriendInfoIndication.setType(type); sendFriendInfoIndication.setType(type);
sendFriendInfoIndication.setFriends(CBean2Proto.getFriendInfo(uid, user.getFriendManager())); sendFriendInfoIndication.setFriends(CBean2Proto.getFriendInfo(uid, user.getFriendManager()));
@ -329,12 +332,11 @@ public class FriendLogic {
int uid = iSession.getUid(); int uid = iSession.getUid();
User user = UserManager.getUser(uid); User user = UserManager.getUser(uid);
FriendManager friendManager = user.getFriendManager(); FriendManager friendManager = user.getFriendManager();
User friendUser = null; User friendUser = UserManager.getUserNotCache(friendId);
FriendManager friendfriendManager = null; if (friendId == 0 || friendUser == null){
if(friendId!=0){ return;
friendUser = UserManager.getUser(friendId);
friendfriendManager = friendUser.getFriendManager();
} }
FriendManager friendManager1 = friendUser.getFriendManager();
List<Integer> friends = friendManager.getFriends(); List<Integer> friends = friendManager.getFriends();
List<Integer> applyFriends = friendManager.getApplyFriends(); List<Integer> applyFriends = friendManager.getApplyFriends();
int maxFriends = SSpecialConfig.getIntegerValue(SSpecialConfig.FRIENDAMOUNT_LIMIT); int maxFriends = SSpecialConfig.getIntegerValue(SSpecialConfig.FRIENDAMOUNT_LIMIT);
@ -349,28 +351,28 @@ public class FriendLogic {
} }
if(friendManager.getBlackFriends().contains(friendId)){ if(friendManager.getBlackFriends().contains(friendId)){
friendManager.delApplyFriend(friendId); friendManager.delApplyFriend(friendId);
friendfriendManager.delMyApplyFriend(uid); friendManager1.delMyApplyFriend(uid);
throw new ErrorCodeException(ErrorCode.IN_BLACK); throw new ErrorCodeException(ErrorCode.IN_BLACK);
} }
friendFriendList = friendfriendManager.getFriends(); friendFriendList = friendManager1.getFriends();
if (friendFriendList.size() >=maxFriends){ if (friendFriendList.size() >=maxFriends){
throw new ErrorCodeException(ErrorCode.FRIENDS_SIDE_MAX); throw new ErrorCodeException(ErrorCode.FRIENDS_SIDE_MAX);
} }
if(friendfriendManager.getBlackFriends().contains(uid)){ if(friendManager1.getBlackFriends().contains(uid)){
throw new ErrorCodeException(ErrorCode.FRIENDS_SIDE_BLACK); throw new ErrorCodeException(ErrorCode.FRIENDS_SIDE_BLACK);
} }
if (applyFriends.contains(friendId)){ if (applyFriends.contains(friendId)){
friendManager.delApplyFriend(friendId); friendManager.delApplyFriend(friendId);
friendfriendManager.delMyApplyFriend(uid); friendManager1.delMyApplyFriend(uid);
} }
if (friendfriendManager.getApplyFriends().contains(uid)||applyFriends.contains(friendId)){ if (friendManager1.getApplyFriends().contains(uid)||applyFriends.contains(friendId)){
friendfriendManager.delApplyFriend(uid); friendManager1.delApplyFriend(uid);
friendManager.delMyApplyFriend(friendId); friendManager.delMyApplyFriend(friendId);
} }
friendManager.addFriendId(friendId); friendManager.addFriendId(friendId);
friendfriendManager.addFriendId(uid); friendManager1.addFriendId(uid);
initFriendGriveAndRreward(friendId, uid, friendManager, friendfriendManager); initFriendGriveAndRreward(friendId, uid, friendManager, friendManager1);
sendFriendInfoIndication(uid,friendId,2); sendFriendInfoIndication(uid,friendId,2);
user.getUserMissionManager().onGameEvent(user,GameEvent.FRIEND_NUMS,1); user.getUserMissionManager().onGameEvent(user,GameEvent.FRIEND_NUMS,1);
updateFriendUserInfo(friendUser); updateFriendUserInfo(friendUser);
@ -379,7 +381,7 @@ public class FriendLogic {
applyFriends = friendManager.getApplyFriends(); applyFriends = friendManager.getApplyFriends();
if (applyFriends.contains(friendId)){ if (applyFriends.contains(friendId)){
friendManager.delApplyFriend(friendId); friendManager.delApplyFriend(friendId);
friendfriendManager.delMyApplyFriend(uid); friendManager1.delMyApplyFriend(uid);
} }
break; break;
case 3://全部同意 case 3://全部同意
@ -406,38 +408,36 @@ public class FriendLogic {
} }
private int allApplyFriend(int uid, FriendManager friendManager, List<Integer> friends, List<Integer> applyFriends, int maxFriends) throws Exception { private int allApplyFriend(int uid, FriendManager friendManager, List<Integer> friends, List<Integer> applyFriends, int maxFriends) throws Exception {
User friendUser;
FriendManager friendfriendManager;
List<Integer> friendFriendList;
List<Integer> alreadyFriendList = new ArrayList<>(); List<Integer> alreadyFriendList = new ArrayList<>();
int nums =0; int nums =0;
for (Integer applyfriendId :applyFriends){ for (Integer applyFriendId :applyFriends){
friendUser = UserManager.getUser(applyfriendId); User friendUser = UserManager.getUserNotCache(applyFriendId);
friendfriendManager = friendUser.getFriendManager(); if (friendUser == null){
friendFriendList = friendfriendManager.getFriends();
if (friends.contains(applyfriendId)){
continue; continue;
} }
if(friendManager.getBlackFriends().contains(applyfriendId)){ FriendManager friendManager1 = friendUser.getFriendManager();
List<Integer> friendFriendList = friendManager1.getFriends();
if (friends.contains(applyFriendId)){
continue;
}
if(friendManager.getBlackFriends().contains(applyFriendId)){
continue; continue;
} }
if (friends.size()+1> maxFriends){ if (friends.size()+1> maxFriends){
// throw new ErrorCodeException(ErrorCode.FRIENDS_MAX);
continue; continue;
} }
if (friendFriendList.size()>= maxFriends){ if (friendFriendList.size()>= maxFriends){
continue; continue;
} }
alreadyFriendList.add(applyfriendId); alreadyFriendList.add(applyFriendId);
// friendManager.delApplyFriend(applyfriendId); friendManager1.addFriendId(uid);
friendfriendManager.addFriendId(uid); friendManager.addFriendId(applyFriendId);
friendManager.addFriendId(applyfriendId); friendManager1.delMyApplyFriend(uid);
UserManager.getUser(applyfriendId).getFriendManager().delMyApplyFriend(uid); initFriendGriveAndRreward(applyFriendId, uid, friendManager, friendManager1);
initFriendGriveAndRreward(applyfriendId, uid, friendManager, friendfriendManager); sendFriendInfoIndication(uid,applyFriendId,2);
sendFriendInfoIndication(uid,applyfriendId,2);
updateFriendUserInfo(friendUser); updateFriendUserInfo(friendUser);
nums++; 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()){ if(!alreadyFriendList.isEmpty()){
for(Integer id:alreadyFriendList){ for(Integer id:alreadyFriendList){
@ -480,12 +480,13 @@ public class FriendLogic {
if (!friends.contains(friendId)){ if (!friends.contains(friendId)){
throw new ErrorCodeException(ErrorCode.FRIENDS_ISNOT_FRIEND); 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(); FriendManager friendManager1 = friendUser.getFriendManager();
delFriendInfo(friendId, uid, friendManager, friendManager1); delFriendInfo(friendId, uid, friendManager, friendManager1);
sendFriendStatedication(uid,friendId,1); sendFriendStatedication(uid,friendId,1);
// 删除助战
// HelpHeroLogic.getInstance().delFriendClearHelp(user,friendUser);
MessageUtil.sendMessage(iSession, 1, msgId, null, true); MessageUtil.sendMessage(iSession, 1, msgId, null, true);
} }
@ -506,11 +507,13 @@ public class FriendLogic {
} }
List<Integer> friends = friendManager.getFriends(); List<Integer> friends = friendManager.getFriends();
if (friends.contains(friendId)){ if (friends.contains(friendId)){
User friendUser = UserManager.getUser(friendId); User friendUser = UserManager.getUserNotCache(friendId);
if (friendUser != null){
FriendManager friendManager1 = friendUser.getFriendManager(); FriendManager friendManager1 = friendUser.getFriendManager();
delFriendInfo(friendId, uid, friendManager, friendManager1); delFriendInfo(friendId, uid, friendManager, friendManager1);
sendFriendStatedication(uid,friendId,1); sendFriendStatedication(uid,friendId,1);
} }
}
friendManager.addBlackFriendId(friendId); friendManager.addBlackFriendId(friendId);
}else if(optType == 2){ }else if(optType == 2){
friendManager.delBlackFriends(friendId); friendManager.delBlackFriends(friendId);
@ -543,47 +546,37 @@ public class FriendLogic {
FriendManager friendManager = user.getFriendManager(); FriendManager friendManager = user.getFriendManager();
List<Integer> friends = friendManager.getFriends(); List<Integer> friends = friendManager.getFriends();
Map<Integer, Integer> giveMap = friendManager.getGiveMap(); Map<Integer, Integer> giveMap = friendManager.getGiveMap();
// 获取全部未赠送得好友
ArrayList<Integer> 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; int times = 0;
if (type == 1) {//赠送一个人 for (Integer friendUid : notGive) {
if (!friends.contains(friendId)) { User friendUser = UserManager.getUserNotCache(friendUid);
throw new ErrorCodeException(ErrorCode.FRIENDS_ISNOT_FRIEND); if (friendUser != null){
}
if (giveMap.get(friendId) == 1) {
throw new ErrorCodeException(ErrorCode.FRIENDS_SEMD_YET);
}
User friendUser = UserManager.getUser(friendId);
FriendManager friendManager1 = friendUser.getFriendManager(); FriendManager friendManager1 = friendUser.getFriendManager();
Map<Integer, Integer> haveRewardMap = friendUser.getFriendManager().getHaveRewardMap(); Map<Integer, Integer> haveRewardMap = friendManager1.getHaveRewardMap();
if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) { if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) {
throw new ErrorCodeException(ErrorCode.FRIENDS_SEMD_YET); throw new ErrorCodeException(ErrorCode.FRIENDS_SEMD_YET);
} }
friendManager.updateGiveMap(friendId,1); friendManager.updateGiveMap(friendId,1);
// boolean check = PlayerLogic.getInstance().checkAndUpdate(user,STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getMaxEnergyGet(), 1);
// if(check){
friendManager1.updateHaveRewardMap(uid,1); friendManager1.updateHaveRewardMap(uid,1);
sendFriendStatedication(uid,friendId,2); sendFriendStatedication(uid,friendId,2);
// }
times++;
}else{ //赠送全部好友
for (Integer friendUserId : friends) {
if (giveMap.get(friendUserId) == 1) {
continue;
}
User friendUser = UserManager.getUser(friendUserId);
FriendManager friendManager1 = friendUser.getFriendManager();
Map<Integer, Integer> haveRewardMap = friendManager1.getHaveRewardMap();
if (haveRewardMap.containsKey(uid) && haveRewardMap.get(uid) != 0) {
continue;
}
friendManager.updateGiveMap(friendUserId,1);
// boolean check = PlayerLogic.getInstance().checkAndUpdate(user,STableManager.getFigureConfig(CommonStaticConfig.class).getGameSetting().getMaxEnergyGet(), 1);
// if(check){
friendManager1.updateHaveRewardMap(uid,1);
sendFriendStatedication(uid,friendUserId,2);
// }
times++; times++;
} }
} }
user.getUserMissionManager().onGameEvent(user, GameEvent.GIVE_PRESENT,times); user.getUserMissionManager().onGameEvent(user, GameEvent.GIVE_PRESENT,times);
MessageUtil.sendMessage(iSession, 1, msgId, null, true); MessageUtil.sendMessage(iSession, 1, msgId, null, true);
} }
@ -671,22 +664,21 @@ public class FriendLogic {
PlayerManager playerInfoManager = user.getPlayerInfoManager(); PlayerManager playerInfoManager = user.getPlayerInfoManager();
FriendManager friendManager = user.getFriendManager(); FriendManager friendManager = user.getFriendManager();
List<Integer> friends = friendManager.getFriends(); List<Integer> friends = friendManager.getFriends();
// boolean result = ShieldedWordUtils.checkName( name);
// if (!result) {
// MessageUtil.sendErrorResponse(iSession, 0, msgId, "名字不合法");
// return;
// }
if (playerInfoManager.getNickName().equals(name)){ if (playerInfoManager.getNickName().equals(name)){
throw new ErrorCodeException(ErrorCode.FRIENDS_SEARCH_SELF); throw new ErrorCodeException(ErrorCode.FRIENDS_SEARCH_SELF);
} }
String key = RedisKey.getKey(RedisKey.C_User_Name_Key, name, false); String key = RedisKey.getKey(RedisKey.C_User_Name_Key, name, false);
Object friend = RedisUtil.getInstence().get(key); Object friendIds = RedisUtil.getInstence().get(key);
if (friend == null){ if (friendIds == null){
throw new ErrorCodeException(ErrorCode.FRIENDS_USER_NULL); throw new ErrorCodeException(ErrorCode.FRIENDS_USER_NULL);
} }
int type = 1; int type = 1;
int friendId = Integer.parseInt(friend.toString()); int friendId = Integer.parseInt(friendIds.toString());
List<Integer> applyFriends = UserManager.getUser(friendId).getFriendManager().getApplyFriends(); User friend = UserManager.getUserNotCache(friendId);
if (friend == null){
throw new ErrorCodeException(ErrorCode.FRIENDS_USER_NULL);
}
List<Integer> applyFriends = friend.getFriendManager().getApplyFriends();
if (friends.contains(friendId)){ if (friends.contains(friendId)){
type = 2; type = 2;
}else if (applyFriends.contains(friendId)){ }else if (applyFriends.contains(friendId)){
@ -713,13 +705,7 @@ public class FriendLogic {
friendManager.setHaveRewardMap(new HashMap<>()); friendManager.setHaveRewardMap(new HashMap<>());
for (Map.Entry<Integer,Integer> entry: giveMap.entrySet()){ for (Map.Entry<Integer,Integer> entry: giveMap.entrySet()){
Integer friendId = entry.getKey(); Integer friendId = entry.getKey();
User friendUser = null; User friendUser = UserManager.getUserNotCache(friendId);
try {
friendUser = UserManager.getUser(friendId);
}catch (Exception e){
LOGGER.info("获取好友信息报错friendId当前{}",friendId);
e.printStackTrace();
}
if (friendUser == null){ if (friendUser == null){
continue; continue;
} }

View File

@ -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; User user = null;
try { try {
user = UserManager.getUser(friendId); user = UserManager.getUserNotCache(friendId);
} catch (Exception e) { } catch (Exception e) {
LOGGER.info("getFriendInfo user == null friendId={} e={}", friendId, e.toString()); LOGGER.info("getFriendInfo user == null friendId={} e={}", friendId, e.toString());
} }