# Conflicts:
#	serverlogic/src/main/java/com/ljsd/GmService.java
back_recharge
zhangshanxue 2019-09-18 18:14:56 +08:00
commit b84afdf49a
14 changed files with 171 additions and 48 deletions

View File

@ -69,7 +69,8 @@ public class JavaAgent {
//该方法支持在JVM 启动后再启动代理对应清单的Agent-Class:属性 //该方法支持在JVM 启动后再启动代理对应清单的Agent-Class:属性
public static void agentmain(String args,Instrumentation inst){ public static void agentmain(String args,Instrumentation inst){
try{ try{
writeLog("args=:[" + args + "]"); writeLog("argsxxxxxxxxxx=:[" + args + "]");
writeLog("argsxxxxxxxxxxyyy=:[" + JavaAgent.class.getResource("").getPath() + "]");
File f = new File(args); File f = new File(args);
byte[] targetClassFile = new byte[(int)f.length()]; byte[] targetClassFile = new byte[(int)f.length()];
DataInputStream dis = new DataInputStream(new FileInputStream(f)); DataInputStream dis = new DataInputStream(new FileInputStream(f));
@ -78,8 +79,8 @@ public class JavaAgent {
DynamicClassLoader myLoader = new DynamicClassLoader(); DynamicClassLoader myLoader = new DynamicClassLoader();
Class targetClazz = myLoader.findClass(targetClassFile); Class targetClazz = myLoader.findClass(targetClassFile);
writeLog("class name is:["+targetClazz.getName() + "]"); writeLog("class namexxxxx is:["+targetClazz.getName() + "]");
writeLog("class path is:["+targetClazz.getResource("").getPath() + "]");
Class<?> clz = Class.forName(targetClazz.getName()); Class<?> clz = Class.forName(targetClazz.getName());
writeLog("clz-->Class.forName:(\""+targetClazz.getName() + "\")"); writeLog("clz-->Class.forName:(\""+targetClazz.getName() + "\")");

View File

@ -1,6 +1,7 @@
package com.ljsd; package com.ljsd;
import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.kefu.GmGlobleAbstract; import com.ljsd.jieling.kefu.GmGlobleAbstract;
import com.ljsd.jieling.kefu.GmInterface; import com.ljsd.jieling.kefu.GmInterface;
import com.ljsd.jieling.kefu.GmRoleAbstract; import com.ljsd.jieling.kefu.GmRoleAbstract;
@ -49,6 +50,27 @@ public class GmService implements RPCRequestGMIFace.Iface {
return result; return result;
} }
if(cmd.contains("hotfix")){
List<User> usersInDB = MongoUtil.getLjsdMongoTemplate().findAll("user", User.class);
List<Integer> sendIds = new ArrayList<>(usersInDB.size());
for(User user1 : usersInDB){
User userInMem = UserManager.getUserInMem(user1.getId());
if(userInMem == null){
continue;
}
sendIds.add(user1.getId());
}
InnerMessageUtil.broadcastWithRandom(new AyyncWorker() {
@Override
public void work(User user) throws Exception {
LOGGER.info("hotfix user={}",user.getId());
MongoUtil.getLjsdMongoTemplate().save(user);
}
}, sendIds, Math.min(10, 10));
result.setResultCode(1);
return result;
}
obj = (GmInterface) Class.forName( obj = (GmInterface) Class.forName(
GmInterface.class.getPackage().getName() + ".Cmd_" GmInterface.class.getPackage().getName() + ".Cmd_"
+ arg[0].toLowerCase()).newInstance(); + arg[0].toLowerCase()).newInstance();
@ -59,6 +81,9 @@ public class GmService implements RPCRequestGMIFace.Iface {
} }
try { try {
String[] parameters = java.util.Arrays.copyOfRange(arg, 1, arg.length); String[] parameters = java.util.Arrays.copyOfRange(arg, 1, arg.length);
if (obj instanceof GmRoleAbstract) { if (obj instanceof GmRoleAbstract) {
List<Integer> sendIds = new LinkedList<>(); List<Integer> sendIds = new LinkedList<>();
if (obj instanceof GmGlobleAbstract) { if (obj instanceof GmGlobleAbstract) {

View File

@ -51,6 +51,5 @@ public class ServerConfig extends MongoBase {
public void setWorldLevel(int worldLevel) { public void setWorldLevel(int worldLevel) {
this.worldLevel = worldLevel; this.worldLevel = worldLevel;
updateString("world_level",worldLevel);
} }
} }

View File

@ -4,12 +4,18 @@ import com.google.gson.Gson;
import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.common.mogodb.LjsdMongoTemplate;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.util.MathUtils; import com.ljsd.jieling.util.MathUtils;
import com.mongodb.MongoClientURI;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -82,7 +88,6 @@ public class MongoUtil {
return MongoUtil.getInstence().coreMongoTemplate; return MongoUtil.getInstence().coreMongoTemplate;
} }
public static void main(String[] args) { public static void main(String[] args) {
try { try {
LjsdMongoTemplate ljsdMongoTemplate = getLjsdMongoTemplate(); LjsdMongoTemplate ljsdMongoTemplate = getLjsdMongoTemplate();

View File

@ -132,12 +132,14 @@ public class GetPlayerInfoHandler extends BaseHandler{
endless.setMapId(MapLogic.getEndlessMapId()); endless.setMapId(MapLogic.getEndlessMapId());
endless.setWorldLevel(MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class).getWorldLevel()); endless.setWorldLevel(MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class).getWorldLevel());
endless.setBloodScore(RedisUtil.getInstence().getZSetScore(RedisKey.BLOODY_RANK,Integer.toString(1), Integer.toString(userId)).intValue()); endless.setBloodScore(RedisUtil.getInstence().getZSetScore(RedisKey.BLOODY_RANK,Integer.toString(1), Integer.toString(userId)).intValue());
List<CommonProto.GiftGoodsInfo> goodsBagInfo = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size());
BuyGoodsLogic.getGoodsBagInfo(userId,goodsBagInfo,true);
PlayerInfoProto.GetPlayerInfoResponse getPlayerInfoResponse PlayerInfoProto.GetPlayerInfoResponse getPlayerInfoResponse
= PlayerInfoProto.GetPlayerInfoResponse.newBuilder() = PlayerInfoProto.GetPlayerInfoResponse.newBuilder()
.setPlayer(player) .setPlayer(player)
.addAllNewPlayerGuidePoint(list) .addAllNewPlayerGuidePoint(list)
.addAllPrivilege(privilegeList) .addAllPrivilege(privilegeList)
.addAllGiftGoodsInfo(BuyGoodsLogic.getGoodsBagInfo(userId)) .addAllGiftGoodsInfo(goodsBagInfo)
.addAllBuyGoodsId(rechargeInfo.getBuyGoodsTimes().keySet()) .addAllBuyGoodsId(rechargeInfo.getBuyGoodsTimes().keySet())
.setSuddenlyBossInfo(suddenlyBossInfo) .setSuddenlyBossInfo(suddenlyBossInfo)
.setVipBaseInfo(vipInfoProto) .setVipBaseInfo(vipInfoProto)

View File

@ -5,6 +5,7 @@ import com.ljsd.jieling.config.*;
import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.dataReport.reportBeans_37.ChatContentType; import com.ljsd.jieling.dataReport.reportBeans_37.ChatContentType;
import com.ljsd.jieling.dataReport.reportBeans_37.Repot37EventUtil; import com.ljsd.jieling.dataReport.reportBeans_37.Repot37EventUtil;
import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.BIReason;
@ -1027,26 +1028,30 @@ public class MapLogic {
//无尽副本 //无尽副本
if(challengeConfig.getType()==4) { if(challengeConfig.getType()==4) {
if(outType==1){ if(outType==1){
mapManager.updateEndlessLocation(0); // mapManager.updateEndlessLocation(0);
int[][] cost = new int[1][]; // int[][] cost = new int[1][];
int costId = SChallengeSetting.getChallengeSetting().getActionPowerId(); // int costId = SChallengeSetting.getChallengeSetting().getActionPowerId();
int costNum = SEndlessMapConfig.sEndlessMapConfigMap.get(mapId).getTeleportCost(); // int costNum = SEndlessMapConfig.sEndlessMapConfigMap.get(mapId).getTeleportCost();
int costNum2 = SEndlessMapConfig.sEndlessMapConfigMap.get(targetMapId).getTeleportCost(); // int costNum2 = SEndlessMapConfig.sEndlessMapConfigMap.get(targetMapId).getTeleportCost();
int resultCost = Math.abs(costNum-costNum2); // int resultCost = Math.abs(costNum-costNum2);
mapManager.updateEndlessConsumeExecution(mapManager.getEndlessMapInfo().getConsumeExecution()+resultCost); // mapManager.updateEndlessConsumeExecution(mapManager.getEndlessMapInfo().getConsumeExecution()+resultCost);
cost[0]= new int[]{costId,resultCost};//Math.abs(costNum-costNum) // cost[0]= new int[]{costId,resultCost};//Math.abs(costNum-costNum)
boolean costResult = ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1); // boolean costResult = ItemUtil.itemCost(user,cost,BIReason.ENDLESS_CONSUME_EXECUTION,1);
mapManager.setCurMapId(0); // mapManager.setCurMapId(0);
mapManager.setCurXY(0); // mapManager.setCurXY(0);
mapManager.updateEndlessLocation(0); // mapManager.updateEndlessLocation(0);
//
if(!costResult){ // if(!costResult){
MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"行动力不足!"); // MessageUtil.sendErrorResponse(session,0,messageType.getNumber(),"行动力不足!");
return; // return;
} // }
LOGGER.info("传送消耗{}行动力"+Math.abs(costNum-costNum2)); // LOGGER.info("传送消耗{}行动力"+Math.abs(costNum-costNum2));
}else{ }else{
mapManager.updateEndlessLocation(curXY); if(MapLogic.endlessSeason!=mapManager.getEndlessMapInfo().getSeason()){
mapManager.updateEndlessLocation(0);
}else{
mapManager.updateEndlessLocation(curXY);
}
mapManager.updateEndlessConsumeExecution(0); mapManager.updateEndlessConsumeExecution(0);
mapManager.updateEndlessFightCount(0); mapManager.updateEndlessFightCount(0);
} }

View File

@ -64,7 +64,7 @@ public class HotfixUtil{
for (ClassBean cl : list) { for (ClassBean cl : list) {
String path = "../conf/hotswap/"+cl.getName(); String path = "../conf/hotswap/"+cl.getName();
LOGGER.info("HotfixUtil->i={},path={}", i, path); LOGGER.info("HotfixUtil->i={},path={}", i, path);
vm.loadAgent("../lib/serverlogiclib/hotfix.jar",path);//path参数即agentmain()方法的第一个参数 vm.loadAgent("../lib/hotfix.jar",path);//path参数即agentmain()方法的第一个参数
i++; i++;
} }
currVerion = version; currVerion = version;

View File

@ -37,7 +37,10 @@ import com.ljsd.jieling.util.TimeUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Query;
import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -164,6 +167,7 @@ public class GlobalDataManaager {
case Endless: case Endless:
MapLogic.getInstance().updateEndlessSeason(timeControllerOfFunction.getTimes()); MapLogic.getInstance().updateEndlessSeason(timeControllerOfFunction.getTimes());
serverConfigTmp.setWorldLevel(calWorldLevel()); serverConfigTmp.setWorldLevel(calWorldLevel());
MongoUtil.getLjsdMongoTemplate().save(serverConfigTmp);
MapLogic.getInstance().setEndlessMapId(getEndleeMapIdByLevel()); MapLogic.getInstance().setEndlessMapId(getEndleeMapIdByLevel());
break; break;
default: default:
@ -350,7 +354,22 @@ public class GlobalDataManaager {
private static int calWorldLevel(){ private static int calWorldLevel(){
return 20; Query query = new Query();
query.with(new Sort(Sort.Direction.DESC,"playerManager.level"));
query.fields().include("playerManager.level");
List<User> users = null;
try {
users = MongoUtil.getLjsdMongoTemplate().findAllByCondition(query, User.class);
} catch (Exception e) {
e.printStackTrace();
}
int size = (int)(users.size()*0.85);
int level = 0;
for(int i = 0 ; i <size;i++){
level+=users.get(i).getPlayerInfoManager().getLevel();
}
LOGGER.info("计算世界等级为{}",level/size);
return level/size;
} }
private static int getEndleeMapIdByLevel() throws Exception { private static int getEndleeMapIdByLevel() throws Exception {
ServerConfig config = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class); ServerConfig config = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class);

View File

@ -4,6 +4,8 @@ import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.config.SRechargeCommodityConfig; import com.ljsd.jieling.config.SRechargeCommodityConfig;
import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.logic.store.GiftGoodsType; import com.ljsd.jieling.logic.store.GiftGoodsType;
import io.netty.util.internal.ConcurrentSet;
import org.springframework.data.annotation.Transient;
import java.util.*; import java.util.*;
@ -16,6 +18,9 @@ public class RechargeInfo extends MongoBase{
private int hadBuyFound; private int hadBuyFound;
private int isDayFirst; private int isDayFirst;
@Transient
private Set<Integer> cacheSendedIds = new ConcurrentSet<>();
private Map<Integer,Long> levelBagMap = new HashMap<>(); private Map<Integer,Long> levelBagMap = new HashMap<>();
private Map<Integer,Integer> buyGoodsTimes = new HashMap<>(); private Map<Integer,Integer> buyGoodsTimes = new HashMap<>();
@ -28,6 +33,14 @@ public class RechargeInfo extends MongoBase{
} }
public boolean addNewSendId(int id){
return cacheSendedIds.add(id);
}
public void clearCacheSendId(){
cacheSendedIds.clear();
}
//检测商品是否过期 //检测商品是否过期
public Set<Integer> checkIsGoodsTypeOverTime(){ public Set<Integer> checkIsGoodsTypeOverTime(){
int now = (int)(System.currentTimeMillis()/1000); int now = (int)(System.currentTimeMillis()/1000);

View File

@ -978,9 +978,9 @@ public class CombatLogic {
effect[1] = special; effect[1] = special;
for(int i = 0 ; i<effect.length;i++){ for(int i = 0 ; i<effect.length;i++){
if(effect[i].length>2){ if(effect[i].length>2){
LOGGER.info("生效的光环为{}{}{}",effect[i][0],effect[i][1],effect[i][2]); // LOGGER.info("生效的光环为{}{}{}",effect[i][0],effect[i][1],effect[i][2]);
}else{ }else{
LOGGER.info("生效的光环为{}{}",effect[i][0],effect[i][1]); // LOGGER.info("生效的光环为{}{}",effect[i][0],effect[i][1]);
} }
} }

View File

@ -1,7 +1,11 @@
package com.ljsd.jieling.logic.store; package com.ljsd.jieling.logic.store;
import com.ljsd.common.mogodb.MongoUpdateCache;
import com.ljsd.common.mogodb.MongoUpdateCacheThreadLocal;
import com.ljsd.jieling.config.*; import com.ljsd.jieling.config.*;
import com.ljsd.jieling.core.HandlerLogicThread;
import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.ktbeans.KtEventUtils; import com.ljsd.jieling.ktbeans.KtEventUtils;
@ -9,33 +13,33 @@ import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean;
import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.dao.ActivityMission;
import com.ljsd.jieling.logic.dao.RechargeInfo; import com.ljsd.jieling.logic.dao.RechargeInfo;
import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.mission.event.MissionEventDistributor;
import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto; import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.thrift.idl.Result; import com.ljsd.jieling.thrift.idl.Result;
import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.*;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.StringUtil;
import com.ljsd.jieling.util.TimeUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.lang.reflect.Field;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
/** /**
* 西 * 西
*/ */
public class BuyGoodsLogic { public class BuyGoodsLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(BuyGoodsLogic.class); private static final Logger LOGGER = LoggerFactory.getLogger(BuyGoodsLogic.class);
public static void testBuyGoods(ISession session,int goodsId) throws Exception { public static void testBuyGoods(ISession session,int goodsId) throws Exception {
@ -211,6 +215,12 @@ public class BuyGoodsLogic {
resultRes.setResultCode(1); resultRes.setResultCode(1);
KtEventUtils.onKtEvent(user, ParamEventBean.UserPayEvent,goodsId,orderId,resultRes.getResultCode(),price); KtEventUtils.onKtEvent(user, ParamEventBean.UserPayEvent,goodsId,orderId,resultRes.getResultCode(),price);
notifyPaySuccessFul(uid,goodsId,amount != -999); notifyPaySuccessFul(uid,goodsId,amount != -999);
Class<? extends MongoUpdateCache> aClass = MongoUpdateCacheThreadLocal.getMongoUpdateCache().getClass();
Field requestMap = aClass.getDeclaredField("requestMap");
requestMap.setAccessible(true);
requestMap.set(MongoUpdateCacheThreadLocal.getMongoUpdateCache(), new HashMap<>());
MongoUtil.getLjsdMongoTemplate().save(user);
return resultRes; return resultRes;
} }
@ -266,16 +276,19 @@ public class BuyGoodsLogic {
} }
public static List<CommonProto.GiftGoodsInfo> getGoodsBagInfo(int uid) throws Exception { public static boolean getGoodsBagInfo(int uid,List<CommonProto.GiftGoodsInfo> giftGoodsInfoList,boolean needClear) throws Exception {
User user = UserManager.getUser(uid); User user = UserManager.getUser(uid);
RechargeInfo rechargeInfo = user.getPlayerInfoManager().getRechargeInfo(); RechargeInfo rechargeInfo = user.getPlayerInfoManager().getRechargeInfo();
long now = TimeUtils.now(); long now = TimeUtils.now();
Map<Integer, Integer> buyGoodsTimes = rechargeInfo.getBuyGoodsTimes(); Map<Integer, Integer> buyGoodsTimes = rechargeInfo.getBuyGoodsTimes();
Map<Integer, Long> levelBagMap = rechargeInfo.getLevelBagMap(); Map<Integer, Long> levelBagMap = rechargeInfo.getLevelBagMap();
Map<Integer,Integer> goodsOrder = new HashMap<>(6); Map<Integer,Integer> goodsOrder = new HashMap<>(6);
List<CommonProto.GiftGoodsInfo> giftGoodsInfoList = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size());
Map<Integer,CommonProto.GiftGoodsInfo> giftGoodsInfoMap = new HashMap<>(); Map<Integer,CommonProto.GiftGoodsInfo> giftGoodsInfoMap = new HashMap<>();
long createTime = user.getPlayerInfoManager().getCreateTime(); long createTime = user.getPlayerInfoManager().getCreateTime();
boolean needChange= false;
if(needClear){
rechargeInfo.clearCacheSendId();
}
for(SRechargeCommodityConfig sRechargeCommodityConfig :SRechargeCommodityConfig.rechargeCommodityConfigMap.values()){ for(SRechargeCommodityConfig sRechargeCommodityConfig :SRechargeCommodityConfig.rechargeCommodityConfigMap.values()){
int limit = sRechargeCommodityConfig.getLimit(); int limit = sRechargeCommodityConfig.getLimit();
int goodsId = sRechargeCommodityConfig.getId(); int goodsId = sRechargeCommodityConfig.getId();
@ -313,7 +326,7 @@ public class BuyGoodsLogic {
startTime = sRechargeCommodityConfig.getTimeLong(createTime,1); startTime = sRechargeCommodityConfig.getTimeLong(createTime,1);
endTime = sRechargeCommodityConfig.getTimeLong(createTime,2); endTime = sRechargeCommodityConfig.getTimeLong(createTime,2);
} }
if(now<startTime){ if(now<startTime || (endTime!=0 && now > endTime)){
continue; continue;
} }
int order = sRechargeCommodityConfig.getOrder(); int order = sRechargeCommodityConfig.getOrder();
@ -326,21 +339,42 @@ public class BuyGoodsLogic {
} }
goodsOrder.put(sRechargeCommodityConfig.getType(),order*10000 + goodsId); goodsOrder.put(sRechargeCommodityConfig.getType(),order*10000 + goodsId);
giftGoodsInfoMap.put(goodsId,CommonProto.GiftGoodsInfo.newBuilder().setGoodsId(goodsId).setStartTime((int)(startTime/1000)).setBuyTimes(buyTimes).setEndTime((int)(endTime/1000)).build()); giftGoodsInfoMap.put(goodsId,CommonProto.GiftGoodsInfo.newBuilder().setGoodsId(goodsId).setStartTime((int)(startTime/1000)).setBuyTimes(buyTimes).setEndTime((int)(endTime/1000)).build());
boolean isNew = rechargeInfo.addNewSendId(goodsId);
if(isNew){
needChange = true;
}
continue; continue;
} }
boolean isNew = rechargeInfo.addNewSendId(goodsId);
if(isNew){
needChange = true;
}
giftGoodsInfoList.add(CommonProto.GiftGoodsInfo.newBuilder().setGoodsId(goodsId).setBuyTimes(buyTimes).setStartTime((int)(startTime/1000)).setEndTime((int)(endTime/1000)).build()); giftGoodsInfoList.add(CommonProto.GiftGoodsInfo.newBuilder().setGoodsId(goodsId).setBuyTimes(buyTimes).setStartTime((int)(startTime/1000)).setEndTime((int)(endTime/1000)).build());
} }
giftGoodsInfoList.addAll(giftGoodsInfoMap.values()); giftGoodsInfoList.addAll(giftGoodsInfoMap.values());
return giftGoodsInfoList; return needChange;
} }
public static void sendGiftGooodsIndication(int uid) throws Exception { public static void sendGiftGooodsIndication(int uid) throws Exception {
List<CommonProto.GiftGoodsInfo> goodsBagInfo = BuyGoodsLogic.getGoodsBagInfo(uid); List<CommonProto.GiftGoodsInfo> goodsBagInfo = new ArrayList<>(SRechargeCommodityConfig.rechargeCommodityConfigMap.size());
PlayerInfoProto.AllGiftGoodsIndication build = PlayerInfoProto.AllGiftGoodsIndication.newBuilder().addAllGiftGoodsInfo(goodsBagInfo).build(); boolean change = BuyGoodsLogic.getGoodsBagInfo(uid, goodsBagInfo,false);
ISession session = OnlineUserManager.getSessionByUid(uid); ISession session = OnlineUserManager.getSessionByUid(uid);
if(session!=null){ if(session!=null && change){
PlayerInfoProto.AllGiftGoodsIndication build = PlayerInfoProto.AllGiftGoodsIndication.newBuilder().addAllGiftGoodsInfo(goodsBagInfo).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ALL_GIFTGOODS_INDICATION_VALUE,build,true); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ALL_GIFTGOODS_INDICATION_VALUE,build,true);
} }
} }
public static void minuteCheckReharge() throws Exception {
for (Map.Entry<Integer, ISession> entry : OnlineUserManager.sessionMap.entrySet()) {
ISession value = entry.getValue();
if(value.getFiveReady() == 1){
sendGiftGooodsIndication(entry.getKey());
}
}
}
} }

View File

@ -299,7 +299,6 @@ public class ProtocolsManager implements ProtocolsAbstract {
iSession.setOfflineType(ErrorCode.reloginCode); iSession.setOfflineType(ErrorCode.reloginCode);
backUpMsgToRedis(iSession); backUpMsgToRedis(iSession);
OnlineUserManager.userOffline(uid); OnlineUserManager.userOffline(uid);
LOGGER.info("the channel={}",iSession.getCtx().channel());
return 1; return 1;
} }
return 0; return 0;
@ -401,7 +400,6 @@ public class ProtocolsManager implements ProtocolsAbstract {
} }
String key = RedisUtil.getInstence().getKey(RedisKey.RESPONSE_OFFLINE, Integer.toString(session.getUid())); String key = RedisUtil.getInstence().getKey(RedisKey.RESPONSE_OFFLINE, Integer.toString(session.getUid()));
LOGGER.info("the uid={},the offlineIndex={},",session.getUid(),session.getIndexToMessage().keySet().iterator().next());
RedisUtil.getInstence().set(key,gson.toJson(session.getIndexToMessage())); RedisUtil.getInstence().set(key,gson.toJson(session.getIndexToMessage()));
} }

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.thread.task; package com.ljsd.jieling.thread.task;
import com.ljsd.GameApplication; import com.ljsd.GameApplication;
import com.ljsd.jieling.config.ServerConfig;
import com.ljsd.jieling.config.reportData.DataMessageUtils; import com.ljsd.jieling.config.reportData.DataMessageUtils;
import com.ljsd.jieling.core.CoreLogic; import com.ljsd.jieling.core.CoreLogic;
import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.GlobalsDef;
@ -18,17 +19,22 @@ import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.arena.ArenaLogic; import com.ljsd.jieling.logic.arena.ArenaLogic;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.GuildFightLogic; import com.ljsd.jieling.logic.family.GuildFightLogic;
import com.ljsd.jieling.logic.fight.CheckFight; import com.ljsd.jieling.logic.fight.CheckFight;
import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.fight.CombatLogic;
import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.question.QuestionLogic; import com.ljsd.jieling.logic.question.QuestionLogic;
import com.ljsd.jieling.logic.store.BuyGoodsLogic;
import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.logic.store.StoreLogic;
import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.server.ProtocolsManager;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Query;
import java.util.Calendar; import java.util.Calendar;
import java.util.List;
public class MinuteTask extends Thread { public class MinuteTask extends Thread {
private static final Logger LOGGER = LoggerFactory.getLogger(MinuteTask.class); private static final Logger LOGGER = LoggerFactory.getLogger(MinuteTask.class);
@ -62,7 +68,23 @@ public class MinuteTask extends Thread {
MailLogic.getInstance().checkReadyToMail(); MailLogic.getInstance().checkReadyToMail();
ProtocolsManager.getInstance().minuteCheckForbidUser(); ProtocolsManager.getInstance().minuteCheckForbidUser();
CoreLogic.getInstance().checkCoreCdk(); CoreLogic.getInstance().checkCoreCdk();
BuyGoodsLogic.minuteCheckReharge();
RedisUtil.getInstence().set(RedisKey.ONLINE_NUM+RedisKey.Delimiter_colon+GameApplication.serverId, String.valueOf(OnlineUserManager.sessionMap.entrySet().size())); RedisUtil.getInstence().set(RedisKey.ONLINE_NUM+RedisKey.Delimiter_colon+GameApplication.serverId, String.valueOf(OnlineUserManager.sessionMap.entrySet().size()));
ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class);
if(serverConfigTmp.getWorldLevel()==1){
Query query = new Query();
query.with(new Sort(Sort.Direction.DESC,"playerManager.level"));
query.fields().include("playerManager.level");
List<User> users = MongoUtil.getLjsdMongoTemplate().findAllByCondition(query, User.class);
int size = (int)(users.size()*0.85);
int level = 0;
for(int i = 0 ; i <size;i++){
level+=users.get(i).getPlayerInfoManager().getLevel();
}
LOGGER.info("计算世界等级为{}",level/size);
serverConfigTmp.setWorldLevel(level/size);
MongoUtil.getLjsdMongoTemplate().save(serverConfigTmp);
}
LOGGER.info("MinuteTask end..."); LOGGER.info("MinuteTask end...");
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("e",e); LOGGER.error("e",e);
@ -74,7 +96,7 @@ public class MinuteTask extends Thread {
int minute = calendar.get(Calendar.MINUTE); int minute = calendar.get(Calendar.MINUTE);
if(minute%5 == 0){ if(minute%5 == 0){
KTAppOnline ktAppOnline = new KTAppOnline(); KTAppOnline ktAppOnline = new KTAppOnline();
int onlineNum = OnlineUserManager.onlineUserMap.size(); int onlineNum = OnlineUserManager.sessionMap.size();
ParamEventBean paramEventBean = new ParamEventBean(ParamEventBean.OnlineEvent); ParamEventBean paramEventBean = new ParamEventBean(ParamEventBean.OnlineEvent);
int time =(int)(calendar.getTimeInMillis()/1000); int time =(int)(calendar.getTimeInMillis()/1000);
paramEventBean.add(String.valueOf(time)); paramEventBean.add(String.valueOf(time));

View File

@ -28,7 +28,7 @@ public class MessageUtil {
backMessage = new byte[0]; backMessage = new byte[0];
} else { } else {
backMessage = generatedMessage.toByteArray(); backMessage = generatedMessage.toByteArray();
LOGGER.info(JsonFormat.printToString(generatedMessage)); //LOGGER.info(JsonFormat.printToString(generatedMessage));
} }
int length = PackageConstant.UID_FIELD_LEN + PackageConstant.TOKEN_LEN int length = PackageConstant.UID_FIELD_LEN + PackageConstant.TOKEN_LEN