优化跨服公会代码

back_recharge
jiahuiwen 2022-04-20 14:43:38 +08:00
parent d48bd0883e
commit 6d0db1f341
9 changed files with 180 additions and 57 deletions

View File

@ -11,6 +11,7 @@ import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.SixiangProfessionInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.GuildCrossHandler.BaseCrossHandler;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
@ -389,23 +390,9 @@ public class CoreService implements RPCRequestIFace.Iface {
if (otherUser.getId() != thisUser.getId()) {
return;
}
switch (type) {
case 1:{ // 更新公会援助信息
AyyncWorker ayyncWorker = new AyyncWorker(thisUser, true, new AyncWorkerRunnable(){
@Override
public void work(User user) throws Exception {
user.getGuildMyInfo().setGuidHelpInfo(otherUser.getGuildMyInfo().getGuidHelpInfo());
}
});
// 更新mongo
ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker);
break;
}
default:{
break;
}
BaseCrossHandler baseCrossHandler1 = GuilidManager.baseCrossHandlerHashMap.get(type);
if (baseCrossHandler1 != null) {
baseCrossHandler1.process(thisUser, otherUser);
}
}
}

View File

@ -14,6 +14,7 @@ import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.GuildHelpLog;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.GuildDef;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.player.PlayerLogic;
@ -111,7 +112,7 @@ public class GuildHelpHelpOtherRequestHandler extends BaseHandler<Family.GuildHe
int serverId = AreaManager.getInstance().getServerIdByUid(targetUid, GameApplication.serverId);
if (serverId != GameApplication.serverId) {
String s = RedisUtil.getInstence().getGson().toJson(target);
PlayerLogic.getInstance().updateUserInfo(serverId, targetUid, s, 1);
GuildLogic.getInstance().updateUserInfo(serverId, targetUid, s, GuildDef.UPDATE_YUANZHU);
}
GuildHelpLog guildHelpLog = new GuildHelpLog(uid, target.getId(), user.getPlayerInfoManager().getNickName(),

View File

@ -9,10 +9,12 @@ import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.GuildLog;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.CrossDeathPathLogic;
import com.ljsd.jieling.logic.family.GuildCrossHandler.BaseCrossHandler;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
import com.ljsd.jieling.util.ConfigurableApplicationContextManager;
import com.mongodb.BasicDBObject;
import config.SGuildSetting;
import org.springframework.data.mongodb.core.MongoTemplate;
@ -23,7 +25,7 @@ import java.util.*;
public class GuilidManager {
// public static Map<Integer,List<GuildLog>> guildLogInfoMap = new HashMap<>();
public static Map<Integer, BaseCrossHandler> baseCrossHandlerHashMap = new HashMap<>();
public static void addGuildInfo(GuildInfo guildInfo) throws Exception {
saveOrUpdateGuildInfo(guildInfo);
@ -135,6 +137,11 @@ public class GuilidManager {
// }
// guildLogInfoMap.get(guildLog.getGuildId()).add(guildLog);
// }
Map<String, BaseCrossHandler> beansOfType = ConfigurableApplicationContextManager.getBeansOfType(BaseCrossHandler.class);
for (BaseCrossHandler baseBehavior : beansOfType.values()) {
baseCrossHandlerHashMap.put(baseBehavior.getOpsType(), baseBehavior);
}
}

View File

@ -0,0 +1,14 @@
package com.ljsd.jieling.logic.family.GuildCrossHandler;
import com.ljsd.jieling.logic.dao.root.User;
public abstract class BaseCrossHandler {
public abstract int getOpsType();
/**
*
* @param thisUser
* @param otherUser
*/
public abstract void process(User thisUser, User otherUser);
}

View File

@ -0,0 +1,48 @@
package com.ljsd.jieling.logic.family.GuildCrossHandler;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.GuildDef;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.AyncWorkerRunnable;
import com.ljsd.jieling.util.AyyncWorker;
import org.springframework.stereotype.Component;
import rpc.protocols.CommonProto;
import rpc.protocols.Family;
import rpc.protocols.MessageTypeProto;
import java.util.Map;
@Component
public class KickOutGuildHandler extends BaseCrossHandler {
@Override
public int getOpsType() {
return GuildDef.UPDATE_YUANZHU;
}
@Override
public void process(User thisUser, User otherUser) {
AyyncWorker ayyncWorker = new AyyncWorker(thisUser, true, new AyncWorkerRunnable() {
@Override
public void work(User user) throws Exception {
user.getGuildMyInfo().setGuidHelpInfo(otherUser.getGuildMyInfo().getGuidHelpInfo());
}
});
// 更新mongo
ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker);
// 玩家在线,通知玩家
ISession sessionByUid = OnlineUserManager.getSessionByUid(thisUser.getId());
if (sessionByUid != null) {
Family.GuildHelpInfoIndication.Builder build = Family.GuildHelpInfoIndication.newBuilder();
for (Map.Entry<Integer, Integer> entry : otherUser.getGuildMyInfo().getGuidHelpInfo().entrySet()) {
build.addGuildHelpInfo(CommonProto.GuildHelpInfo.newBuilder().setType(entry.getKey()).setHadtakenum(otherUser.getGuildMyInfo().getGuidHelpHadTakeInfo().getOrDefault(entry.getKey(), 0)).setNum(entry.getValue()));
}
int guildId = thisUser.getPlayerInfoManager().getGuildId();
build.setName(otherUser.getPlayerInfoManager().getNickName()).setUid(otherUser.getId()).setPracticeLevel(otherUser.getHeroManager().getPracticeLevel());
GuildLogic.sendIndicationToMember(GuilidManager.getGuildInfo(guildId), MessageTypeProto.MessageType.GuildHelpInfoIndication, build.build());
}
}
}

View File

@ -0,0 +1,59 @@
package com.ljsd.jieling.logic.family.GuildCrossHandler;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.GuildDef;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.util.AyncWorkerRunnable;
import com.ljsd.jieling.util.AyyncWorker;
import config.SErrorCodeEerverConfig;
import org.springframework.stereotype.Component;
import util.TimeUtils;
import java.util.Map;
@Component
public class UpdateYuanZhuHandler extends BaseCrossHandler {
@Override
public int getOpsType() {
return GuildDef.UPDATE_KICK_OUT;
}
@Override
public void process(User thisUser, User otherUser) {
AyyncWorker ayyncWorker = new AyyncWorker(thisUser, true, new AyncWorkerRunnable() {
@Override
public void work(User user) throws Exception {
GuildLogic.getInstance().OnUserLeveFamily(user);
int guildId = user.getPlayerInfoManager().getGuildId();
GuildInfo guildInfo = GuilidManager.getGuildInfo(guildId);
user.getPlayerInfoManager().setGuildId(0);
user.getPlayerInfoManager().setWelfareRedPackets(clearRedPacketMap(user));
user.getGuildMyInfo().clearOfLevelGuild();
// 发送通知邮件
String title = SErrorCodeEerverConfig.getI18NMessage("family_kick_title");
String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("family_kick_txt",new Object[]{guildInfo.getName()},new int[]{0},"#");
MailLogic.getInstance().sendMail(user.getId(),title,content,"",(int) (TimeUtils.now()/1000), Global.MAIL_EFFECTIVE_TIME);
}
});
// 更新mongo
ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker);
}
private Map<Integer,Integer> clearRedPacketMap(User user){
Map<Integer,Integer> map = user.getPlayerInfoManager().getWelfareRedPackets();
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue().intValue() == -1){
continue;
}else{
entry.setValue(0);
}
}
return map;
}
}

View File

@ -9,4 +9,9 @@ public interface GuildDef {
int APPOINTMENT = 5; //委任
int LEVEL = 6; //离开宗门
}
// 跨服更新数据
int UPDATE_YUANZHU = 1; // 援助
int UPDATE_KICK_OUT = 2; // 踢出公会
}

View File

@ -37,6 +37,8 @@ import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType;
import com.ljsd.jieling.logic.store.StoreLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.thrift.idl.RPCRequestIFace;
import com.ljsd.jieling.thrift.pool.ClientAdapterPo;
import com.ljsd.jieling.util.*;
import config.*;
import manager.STableManager;
@ -1838,4 +1840,42 @@ public class GuildLogic {
}
}
/**
* rpc
* @param serverId
* @param uid
* @param userStr
* @param type
* @throws Exception
*/
public void updateUserInfo(int serverId, int uid, String userStr, int type) {
String rpcString = RedisUtil.getInstence().getObject(RedisKey.LOGIC_SERVER_INFO, Integer.toString(serverId), String.class, -1);
if (rpcString == null) {
return;
}
String[] split = rpcString.split(":");
if (split.length < 4) {
LOGGER.error("获取玩家rpc地址长度错误rpc{},玩家id{},服务器id{}", rpcString, uid, serverId);
return;
}
String ip = rpcString.split(":")[0];
String port = rpcString.split(":")[3];
StringBuilder sb = new StringBuilder();
sb.append("RPCCORE").append("|").append(ip).append("|").append(port);
ClientAdapterPo<RPCRequestIFace.Client> rPCClient = null;
try{
rPCClient = ClientAdapterPo.getClientAdapterPo(sb.toString());
rPCClient.getClient().updateUserInfoByRpc(uid, userStr, type);
}catch (Exception e) {
LOGGER.error("callback=>{}", e.getMessage());
} finally {
if(rPCClient != null){
rPCClient.returnObject(sb.toString());
}else{
LOGGER.info("callback=> rPCClient is null ");
}
}
}
}

View File

@ -1,6 +1,5 @@
package com.ljsd.jieling.logic.player;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.ljsd.GameApplication;
import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig;
@ -49,7 +48,6 @@ import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo;
import com.ljsd.jieling.logic.mission.main.ServenMissionIdsType;
import com.ljsd.jieling.logic.store.newRechargeInfo.NewRechargeInfo;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.thrift.idl.*;
import com.ljsd.jieling.thrift.pool.ClientAdapterPo;
@ -1817,42 +1815,6 @@ public class PlayerLogic {
return gson.fromJson(userStr, User.class);
}
/**
* rpc
* @param serverId
* @param uid
* @param userStr
* @param type
* @throws Exception
*/
public void updateUserInfo(int serverId, int uid, String userStr, int type) {
String rpcString = RedisUtil.getInstence().getObject(RedisKey.LOGIC_SERVER_INFO, Integer.toString(serverId), String.class, -1);
if (rpcString == null) {
return;
}
String[] split = rpcString.split(":");
if (split.length < 4) {
LOGGER.error("获取玩家rpc地址长度错误rpc{},玩家id{},服务器id{}", rpcString, uid, serverId);
return;
}
String ip = rpcString.split(":")[0];
String port = rpcString.split(":")[3];
StringBuilder sb = new StringBuilder();
sb.append("RPCCORE").append("|").append(ip).append("|").append(port);
ClientAdapterPo<RPCRequestIFace.Client> rPCClient = null;
try{
rPCClient = ClientAdapterPo.getClientAdapterPo(sb.toString());
rPCClient.getClient().updateUserInfoByRpc(uid, userStr, type);
}catch (Exception e) {
LOGGER.error("callback=>{}", e.getMessage());
} finally {
if(rPCClient != null){
rPCClient.returnObject(sb.toString());
}else{
LOGGER.info("callback=> rPCClient is null ");
}
}
}
//森罗幻境自动挂机奖励展示
public static void TowerGetRewardInfoShow(CommonProto.Drop drop,User user){