好友获取优化

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;
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 ,

View File

@ -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<Integer> friends = friendManager.getFriends();
List<Integer> 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<Integer> friends, List<Integer> applyFriends, int maxFriends) throws Exception {
User friendUser;
FriendManager friendfriendManager;
List<Integer> friendFriendList;
List<Integer> 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<Integer> 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<Integer> 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<Integer> friends = friendManager.getFriends();
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;
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<Integer, Integer> 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<Integer, Integer> 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<Integer> 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<Integer> 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<Integer> 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<Integer,Integer> 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;
}

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