diff --git a/serverlogic/src/main/java/com/ljsd/CoreService.java b/serverlogic/src/main/java/com/ljsd/CoreService.java index be2371146..f8845c8d2 100644 --- a/serverlogic/src/main/java/com/ljsd/CoreService.java +++ b/serverlogic/src/main/java/com/ljsd/CoreService.java @@ -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); } - - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildHelpHelpOtherRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildHelpHelpOtherRequestHandler.java index 1b12e6f1c..c7c0d963b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildHelpHelpOtherRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/GuildHelpHelpOtherRequestHandler.java @@ -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> guildLogInfoMap = new HashMap<>(); + public static Map 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 beansOfType = ConfigurableApplicationContextManager.getBeansOfType(BaseCrossHandler.class); + for (BaseCrossHandler baseBehavior : beansOfType.values()) { + baseCrossHandlerHashMap.put(baseBehavior.getOpsType(), baseBehavior); + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/BaseCrossHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/BaseCrossHandler.java new file mode 100644 index 000000000..f2ad757ca --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/BaseCrossHandler.java @@ -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); +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/KickOutGuildHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/KickOutGuildHandler.java new file mode 100644 index 000000000..34074552a --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/KickOutGuildHandler.java @@ -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 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()); + } + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/UpdateYuanZhuHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/UpdateYuanZhuHandler.java new file mode 100644 index 000000000..8d26c2c9a --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildCrossHandler/UpdateYuanZhuHandler.java @@ -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 clearRedPacketMap(User user){ + Map map = user.getPlayerInfoManager().getWelfareRedPackets(); + for(Map.Entry entry : map.entrySet()){ + if(entry.getValue().intValue() == -1){ + continue; + }else{ + entry.setValue(0); + } + } + return map; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildDef.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildDef.java index 1f249c820..8ac3035e1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildDef.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildDef.java @@ -9,4 +9,9 @@ public interface GuildDef { int APPOINTMENT = 5; //委任 int LEVEL = 6; //离开宗门 } + + // 跨服更新数据 + int UPDATE_YUANZHU = 1; // 援助 + int UPDATE_KICK_OUT = 2; // 踢出公会 + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index decd5fc1c..2a58f7944 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -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; @@ -1830,4 +1832,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 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 "); + } + } + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index 74b233658..88ab6b923 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -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 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){