Merge branch 'master_guild_cross' of http://60.1.1.230/backend/jieling_server into master_guild_cross
commit
6ebbd502df
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -9,4 +9,9 @@ public interface GuildDef {
|
|||
int APPOINTMENT = 5; //委任
|
||||
int LEVEL = 6; //离开宗门
|
||||
}
|
||||
|
||||
// 跨服更新数据
|
||||
int UPDATE_YUANZHU = 1; // 援助
|
||||
int UPDATE_KICK_OUT = 2; // 踢出公会
|
||||
|
||||
}
|
||||
|
|
|
@ -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<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 ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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){
|
||||
|
|
Loading…
Reference in New Issue