diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java index a5ee1e365..648f55ba0 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/Creature.java @@ -181,7 +181,6 @@ public abstract class Creature extends SceneActor{ if(update){ path.clear(); getScene().processEventUpdate(EventType.SCENEACTORE_UPDATE,this.getId()); - System.out.println("can not move next" + getId() + " hit the " + sceneActor.getId()); } return false; diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java index 8c7c558b3..e0cfe236f 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java @@ -53,6 +53,11 @@ public class Scene implements Runnable{ private Map analysisDataMap = new HashMap<>(); + public AnalysisData getAnalysisData(int id){ + return analysisDataMap.get(id); + } + + public void randomMineralOfUserDeath(Creature creature,int totalMineal){ if(totalMineal <=0){ return; @@ -125,18 +130,14 @@ public class Scene implements Runnable{ Integer value = next.getValue(); if(tick>value){ Integer monsterIndex = next.getKey(); - System.out.println("the actor siz=" + sceneActorMap.size()); SceneManager.createMonster(this,monsterIndex); processEventUpdate(EventType.SCENEACTORE_UPDATE,monsterIndex); iterator.remove(); - System.out.println("the actor after siz=" + sceneActorMap.size()); - System.out.println("the monsterid={}" + monsterIndex + "recovery"); } } } public void whenMonsterDead(int deadId){ - System.out.println("the monster deadID="+deadId); SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; int[] monsterItem = sBloodyBattleSetting.getMonsterIndexMap().get(deadId); monsterRecoryMap.put(deadId,monsterItem[1]*20 + tick); @@ -159,12 +160,11 @@ public class Scene implements Runnable{ if(msgUpdate || !cacheMsg.isEmpty()){ for(Integer removeId : builder.getRemoveActorIdList()){ sceneActorMap.remove(removeId); - System.out.println("remove the id=------------" + removeId); } for(SceneActor sceneActor : sceneActorMap.values()){ if(sceneActor.getType() != ActorType.Npc){ if(willUpdateActors.contains(sceneActor.getId())){ - builder.addSceneActor(BeanToProto.getSceneActor(sceneActor)); + builder.addSceneActor(BeanToProto.getSceneActor(this,sceneActor)); } } } @@ -200,7 +200,6 @@ public class Scene implements Runnable{ */ public void processEventUpdate(EventType eventType,Object parm){ msgUpdate = true; - System.out.println("the eventType = "+ eventType); switch (eventType){ case SCENEACTORE_UPDATE: willUpdateActors.add((int)parm); @@ -215,7 +214,6 @@ public class Scene implements Runnable{ case SCENEACTORE_REMOVE: int deadId = (int) parm; builder.addRemoveActorId(deadId); - System.out.println("remove the scene id is " + deadId); break; case POSMINERAL_REMOVE: builder.addRemovePosMineralId( (int) parm); @@ -296,7 +294,6 @@ public class Scene implements Runnable{ needAdd = flushNums; } SceneManager.createMinear(this,size,needAdd); - System.out.println("创建矿...."); } } @@ -307,7 +304,7 @@ public class Scene implements Runnable{ //退出操作 public void gameEnd() { - System.out.println("game ending...."); + LOGGER.info("the roomId={} is gameEnding" ,roomId); isEnd = true; //结算操作 List sortDataBeans = new ArrayList<>(); @@ -365,7 +362,6 @@ public class Scene implements Runnable{ executorService.submit(new Callable() { @Override public Integer call() throws Exception { - System.out.println("exce com.ljsd.battle..............................."); SceneActor attackActor = battleRequest.getAttackActor(); SceneActor defActor = battleRequest.getDefActor(); SceneActor temp = null; @@ -395,8 +391,6 @@ public class Scene implements Runnable{ effectBuffer.clearvalues(); effectBuffer.addEffectValue(checkResult[0]); effectBuffer.setEndTime(effectBuffer.getStartTime() + displayTime *1000); - System.out.println(effectBuffer); - System.out.println(attackActor.getId()); } } Map defBufferMap = defActor.getBufferMap(); @@ -405,8 +399,6 @@ public class Scene implements Runnable{ effectBuffer.clearvalues(); effectBuffer.addEffectValue(checkResult[0]==1?0:1); effectBuffer.setEndTime(effectBuffer.getStartTime() + displayTime *1000); - System.out.println(effectBuffer); - } } return 1; diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java index 08c55ba22..9f3a71740 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/SceneActor.java @@ -165,8 +165,9 @@ public abstract class SceneActor{ // 定位到出生点位置 this.setPos(SceneManager.selectForPlayerRebirth(scene)); scene.processEventUpdate(EventType.SCENEACTORE_UPDATE,id); - MessageBoxUtils.onGameEvent(AnalysisEventType.BATTLE,scene,new AnalysisSourceData(value.getTarget(),value.getCaster(),effectValue)); - + if(scene.getSceneActorMap().containsKey(value.getCaster()) &&scene.getSceneActorMap().get(value.getCaster()).getType() == ActorType.Player){ + MessageBoxUtils.onGameEvent(AnalysisEventType.BATTLE,scene,new AnalysisSourceData(value.getTarget(),value.getCaster(),effectValue)); + } }else{ Creature creature = (Creature) scene.getSceneActorMap().get(value.getCaster()); if(creature.getType() == ActorType.Monster){ @@ -184,7 +185,7 @@ public abstract class SceneActor{ } } } - if(this.getType() == ActorType.Player){ + if(this.getType() == ActorType.Player && creature.getType() == ActorType.Player){ MessageBoxUtils.onGameEvent(AnalysisEventType.BATTLE,scene,new AnalysisSourceData(value.getTarget(),value.getCaster(),effectValue)); } stateType = StateType.MOVEABLE; diff --git a/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java b/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java index 7d1862226..04de6f198 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java @@ -1,6 +1,7 @@ package com.ljsd.battle.room; import com.ljsd.battle.manager.BattleManager; +import com.ljsd.battle.statics.AnalysisData; import com.ljsd.battle.vo.UserBloodySnpInfo; import com.ljsd.battle.actor.*; @@ -14,7 +15,7 @@ import java.util.Map; public class BeanToProto { - public static CommonProto.SceneActor getSceneActor(SceneActor sceneActor){ + public static CommonProto.SceneActor getSceneActor(Scene scene,SceneActor sceneActor){ ActorType actorType = sceneActor.getType(); CommonProto.SceneActor.Builder builder = CommonProto.SceneActor.newBuilder() .setId(sceneActor.getId()) @@ -22,7 +23,7 @@ public class BeanToProto { .setType(actorType.getStateCode()) .setState(sceneActor.getStateType().getState()); if(actorType != ActorType.Npc){ - builder.setCreature(getCreature((Creature)sceneActor)); + builder.setCreature(getCreature(scene,(Creature)sceneActor)); } if(actorType == ActorType.Player){ builder.setUserName(BattleManager.bloodMyHeroInfoMap.get(sceneActor.getId()).getName()); @@ -30,7 +31,7 @@ public class BeanToProto { return builder.build(); } - public static CommonProto.Creature getCreature(Creature creature){ + public static CommonProto.Creature getCreature(Scene scene,Creature creature){ CommonProto.Creature.Builder builder = CommonProto.Creature.newBuilder(); if(creature.getType() == ActorType.Player){ UserBloodySnpInfo userBloodySnpInfo = BattleManager.bloodMyHeroInfoMap.get(creature.getId()); @@ -43,6 +44,8 @@ public class BeanToProto { Integer curHp = attribute.get(HeroAttributeEnum.CurHP.getPropertyId()); builder.addHeroInfo(CommonProto.BloodyHeroInfo.newBuilder().setHeroId(heroId).setHeroHp(curHp).setHeroMaxHp(hp).setHeroTid(familyHeroInfo.getTempleteId())); } + AnalysisData analysisData = scene.getAnalysisData(creature.getId()); + builder.setKillNums(analysisData.getKillNums()); } if(creature.getStateType() != StateType.FROZEN){ builder.addAllPath(creature.getPath()); @@ -50,7 +53,6 @@ public class BeanToProto { return builder.setCurHp(creature.getLife().getCurHp()) .setMaxHp(creature.getLife().getMaxMp()) .setSpeed(creature.getSpeed()) - .setCamp(creature.getCamp()) .setMineral(creature.getMineral()) .build(); @@ -77,7 +79,7 @@ public class BeanToProto { CommonProto.SceneInfo.Builder builder = CommonProto.SceneInfo.newBuilder().setMapId(scene.getMapId()); Map sceneActorMap = scene.getSceneActorMap(); for(SceneActor sceneActor : sceneActorMap.values()){ - builder.addSceneActor(getSceneActor(sceneActor)); + builder.addSceneActor(getSceneActor(scene,sceneActor)); Map bufferMap = sceneActor.getBufferMap(); Iterator> iterator = bufferMap.entrySet().iterator(); while (iterator.hasNext()){ diff --git a/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java b/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java index efc5a343c..11d7e190d 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -38,7 +39,41 @@ public class SceneManager { private static Map sceneMap = new HashMap<>(); private static Map sceneByUidMap = new HashMap<>(); + private static Map readyRunTaskMap = new ConcurrentHashMap<>(); + private static ScheduledThreadPoolExecutor scheduledExecutor=new ScheduledThreadPoolExecutor(8); //管理task + static { + scheduledExecutor.execute(new Runnable() { + @Override + public void run() { + while (true){ + try { + SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; + if(sBloodyBattleSetting != null){ + long now = System.currentTimeMillis(); + Iterator> iterator = readyRunTaskMap.entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry next = iterator.next(); + Integer roomId = next.getKey(); + Long time = next.getValue(); + if(time - now > sBloodyBattleSetting.getReloadTime() * 1000){ + iterator.remove(); + Scene scene = sceneMap.get(roomId); + if(scene!=null){ + startGame(scene); + } + + } + } + } + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }); + } public static BloodyMap bloodyMap; public static Queue> possibalePositions = new LinkedBlockingDeque<>(); @@ -397,15 +432,21 @@ public class SceneManager { public static void startGame(Scene scene) { - for(SceneActor sceneActor : scene.getSceneActorMap().values()){ - if(sceneActor.getType()== ActorType.Player){ - MessageUtil.sendRoomStartGameIndication(sceneActor.getId()); + synchronized (scene){ + if(scene.getState() == 1){ + return; } + for(SceneActor sceneActor : scene.getSceneActorMap().values()){ + if(sceneActor.getType()== ActorType.Player){ + MessageUtil.sendRoomStartGameIndication(sceneActor.getId()); + } + } + scene.setState(1); + scene.setStartTime(System.currentTimeMillis()); + scheduledExecutor.execute(scene); + LOGGER.info("the roomid={},start battle pvp",scene.getRoomId()); } - scene.setState(1); - scene.setStartTime(System.currentTimeMillis()); - scheduledExecutor.execute(scene); - LOGGER.info("the roomid={},start battle pvp",scene.getRoomId()); + } @@ -415,4 +456,24 @@ public class SceneManager { scene.getSceneActorMap().get(uid).setGameState(StateType.UNREADY_STATE); } } + + + + static class ReadySceneTask{ + private Scene scene; + private long startTime; + + public ReadySceneTask(Scene scene, long startTime) { + this.scene = scene; + this.startTime = startTime; + } + + public Scene getScene() { + return scene; + } + + public long getStartTime() { + return startTime; + } + } } diff --git a/bloodybattle/src/main/java/com/ljsd/battle/statics/BattleAnalysisProcessor.java b/bloodybattle/src/main/java/com/ljsd/battle/statics/BattleAnalysisProcessor.java index 662048221..15258ac57 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/statics/BattleAnalysisProcessor.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/statics/BattleAnalysisProcessor.java @@ -18,6 +18,7 @@ public class BattleAnalysisProcessor implements AnalysisProcessor{ }else{ analysisData.fail(); } + analysis(scene,analysisData,analysisSourceData); } @@ -37,28 +38,21 @@ public class BattleAnalysisProcessor implements AnalysisProcessor{ String targetName = targetBloodySnpInfo.getName(); String casterName = casterBloodySnpInfo.getName(); scene.addCahceBroadMsg(MessageFormat.format(sBloodyMessagesConfig.getMessage(),new String[]{targetName,casterName})); + return; } } - return; } - if(sBloodyMessagesConfig.getType() == AnalysisDataType.CONTINUOUS_KILL_NUMS.getType()){ + if(sBloodyMessagesConfig.getType() == AnalysisDataType.CONTINUOUS_KILL_NUMS.getType() || sBloodyMessagesConfig.getType() == AnalysisDataType.CONTINUOUS_DIED_NUMS.getType()){ if(targetAnalysisData.getContinuousKillNums() == count){ int id = targetAnalysisData.getId(); UserBloodySnpInfo userBloodySnpInfo = BattleManager.bloodMyHeroInfoMap.get(id); String name = userBloodySnpInfo.getName(); scene.addCahceBroadMsg(MessageFormat.format(sBloodyMessagesConfig.getMessage(),new String[]{name})); + return; } - return; - } - if(sBloodyMessagesConfig.getType() == AnalysisDataType.CONTINUOUS_DIED_NUMS.getType()){ - if(targetAnalysisData.getContinuousDeadNums() == count){ - int id = targetAnalysisData.getId(); - UserBloodySnpInfo userBloodySnpInfo = BattleManager.bloodMyHeroInfoMap.get(id); - String name = userBloodySnpInfo.getName(); - scene.addCahceBroadMsg(MessageFormat.format(sBloodyMessagesConfig.getMessage(),new String[]{name})); - } - return; + } + if(sBloodyMessagesConfig.getType() == AnalysisDataType.END_CONTINUOUS_KILL_NUMS.getType()){ int targetId = analysisSourceData.getTargetId(); int casterId = analysisSourceData.getCaster(); @@ -70,8 +64,9 @@ public class BattleAnalysisProcessor implements AnalysisProcessor{ String targetName = targetBloodySnpInfo.getName(); String casterName = casterBloodySnpInfo.getName(); scene.addCahceBroadMsg(MessageFormat.format(sBloodyMessagesConfig.getMessage(),new String[]{targetName,casterName})); + return; } - return; + } if(sBloodyMessagesConfig.getType() == AnalysisDataType.SEND_TO_DEATH.getType()){ if(targetAnalysisData.getContinuousDeadNums() >= count){ @@ -79,8 +74,9 @@ public class BattleAnalysisProcessor implements AnalysisProcessor{ UserBloodySnpInfo userBloodySnpInfo = BattleManager.bloodMyHeroInfoMap.get(id); String name = userBloodySnpInfo.getName(); scene.addCahceBroadMsg(MessageFormat.format(sBloodyMessagesConfig.getMessage(),new String[]{name})); + return; } - return; + } } diff --git a/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java b/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java index 5a399505b..e8a1b65b6 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/util/MessageUtil.java @@ -95,7 +95,6 @@ public class MessageUtil { return; } int indicationIndex = session.getIndicationIndex(); - System.out.println("indicationIndex----"+indicationIndex); byte[] byteBuf = wrappedBuffer(session.getUid(), session.getToken(), indicationIndex,result, msgId, generatedMessage); if (flush) { session.writeAndFlush(byteBuf); diff --git a/conf/application-bloody.properties b/conf/application-bloody.properties new file mode 100644 index 000000000..363b1bd62 --- /dev/null +++ b/conf/application-bloody.properties @@ -0,0 +1,56 @@ + +# redis config +# RedisݿĬΪ0 +spring.redis.database=2 +#spring.redis.database=2 +# Redisַ +spring.redis.host=60.1.1.21 +# RedisӶ˿ +spring.redis.port=6379 +# Redis루ĬΪգ +spring.redis.password= +# ӳʹøֵʾûƣ +spring.redis.pool.max-active=8 +# ӳȴʱ䣨ʹøֵʾûƣ +spring.redis.pool.max-wait=-1 +# ӳе +spring.redis.pool.max-idle=8 +# ӳеС +spring.redis.pool.min-idle=0 +# ӳʱʱ䣨룩 +spring.redis.timeout=0 + +spring.data.mongodb.uri = mongodb://60.1.1.14:27017/jieling_50215_99991 +#spring.data.mongodb.uri = mongodb://60.1.1.14:27017/jieling_10212 +mongodb.options.maxWaitTime = 120000 +mongodb.options.connectTimeout = 1000 +mongodb.options.socketTimeout = 0 +mongodb.options.threadsAllowedToBlockForConnectionMultiplier = 20 +mongodb.options.connectionsPerHost = 256 +mongodb.options.minConnectionsPerHost = 5 +mongodb.options.maxConnectionIdleTime = 1000 + +netty.tcpPort = 36080 +netty.tcpIp = 60.1.1.215 +netty.reconnectDelay=3000 +netty.bossThreadCount=1 +netty.workerThreadCount=10 +netty.readTimeout=32 +netty.writeTimeout=32 +netty.allTimeout=35 + + + + + + +#core +services.core.ip=60.1.1.215 +services.core.port=27900 +services.core.area=1000 +services.core.id=1 +services.core.weight=5 + + + +logging.config = conf/logback-boot.xml \ No newline at end of file diff --git a/conf/application.properties b/conf/application-core.properties similarity index 100% rename from conf/application.properties rename to conf/application-core.properties diff --git a/conf/application-match.properties b/conf/application-match.properties new file mode 100644 index 000000000..6b77f5d66 --- /dev/null +++ b/conf/application-match.properties @@ -0,0 +1,37 @@ + +# redis config +# RedisݿĬΪ0 +spring.redis.database=2 +#spring.redis.database=2 +# Redisַ +spring.redis.host=60.1.1.21 +# RedisӶ˿ +spring.redis.port=6379 +# Redis루ĬΪգ +spring.redis.password= +# ӳʹøֵʾûƣ +spring.redis.pool.max-active=8 +# ӳȴʱ䣨ʹøֵʾûƣ +spring.redis.pool.max-wait=-1 +# ӳе +spring.redis.pool.max-idle=8 +# ӳеС +spring.redis.pool.min-idle=0 +# ӳʱʱ䣨룩 +spring.redis.timeout=0 + + + + + + +#core +services.core.ip=60.1.1.215 +services.core.port=17900 +services.core.area=1000 +services.core.id=1 +services.core.weight=5 + + + +logging.config = conf/logback-boot.xml \ No newline at end of file diff --git a/matchserver/src/main/java/com/ljsd/MatchServerApplication.java b/matchserver/src/main/java/com/ljsd/MatchServerApplication.java index 1c951b027..83cb420a4 100644 --- a/matchserver/src/main/java/com/ljsd/MatchServerApplication.java +++ b/matchserver/src/main/java/com/ljsd/MatchServerApplication.java @@ -1,6 +1,9 @@ package com.ljsd; +import com.google.gson.Gson; import com.ljsd.jieling.config.CoreSettings; +import com.ljsd.jieling.config.ServerInfo; +import com.ljsd.jieling.redis.RedisKey; import com.ljsd.jieling.redis.RedisUtil; import com.ljsd.jieling.thrift.RPCServerTask; import com.ljsd.jieling.thrift.pool.ThriftPoolUtils; @@ -17,6 +20,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling public class MatchServerApplication { public static int arenId = 0; + private static Gson gson = new Gson(); public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(MatchServerApplication.class); springApplication.setRegisterShutdownHook(false); @@ -27,5 +31,17 @@ public class MatchServerApplication { new RPCServerTask(configurableApplicationContext).start(); CoreSettings bean = configurableApplicationContext.getBean(CoreSettings.class); arenId = bean.getArea(); + register(configurableApplicationContext); } + + public static void register(ConfigurableApplicationContext configurableApplicationContext){ + CoreSettings coreSettings = configurableApplicationContext.getBean(CoreSettings.class); + String ip = coreSettings.getIp(); + int port = coreSettings.getPort(); + int area = coreSettings.getArea(); + String rpcUrl = ip + ":" + port; + RedisUtil.getInstence().sadd(RedisKey.MATCH_SERVER_INFO + ":" + area,gson.toJson(rpcUrl)); + RedisUtil.getInstence().set( RedisKey.MATCH_SIZE + ":" + area,Integer.toString(1)); + } + } diff --git a/matchserver/src/main/java/com/ljsd/jieling/config/ServerInfo.java b/matchserver/src/main/java/com/ljsd/jieling/config/ServerInfo.java index 2f362cd67..91f92b5ea 100644 --- a/matchserver/src/main/java/com/ljsd/jieling/config/ServerInfo.java +++ b/matchserver/src/main/java/com/ljsd/jieling/config/ServerInfo.java @@ -14,6 +14,10 @@ public class ServerInfo { this.rpcUrl = rpcUrl; } + public ServerInfo(String rpcUrl) { + this.rpcUrl = rpcUrl; + } + public String getUserSeeUrl() { return userSeeUrl; } diff --git a/matchserver/src/main/java/com/ljsd/jieling/match/BloodyBattleReallyMatchServer.java b/matchserver/src/main/java/com/ljsd/jieling/match/BloodyBattleReallyMatchServer.java index 2f332b57f..33e02dcee 100644 --- a/matchserver/src/main/java/com/ljsd/jieling/match/BloodyBattleReallyMatchServer.java +++ b/matchserver/src/main/java/com/ljsd/jieling/match/BloodyBattleReallyMatchServer.java @@ -42,7 +42,7 @@ public class BloodyBattleReallyMatchServer implements IMatch{ /** * 每个人需要匹配到的玩家数量 */ - private static int NEED_MATCH_PLAYER_COUNT = 0; + private static int NEED_MATCH_PLAYER_COUNT = 1; /** * 匹配池 */ @@ -66,6 +66,7 @@ public class BloodyBattleReallyMatchServer implements IMatch{ LOGGER.info("执行匹配开始"); try{ //先把匹配池中的玩家按分数分布 + NEED_MATCH_PLAYER_COUNT =Integer.parseInt(RedisUtil.getInstence().get(RedisKey.MATCH_SIZE + ":" + MatchServerApplication.arenId).toString()); TreeMap> pointMap = new TreeMap>(); for (MatchPoolPlayerInfo matchPlayer : playerPool.values()) { //在匹配池中是时间太长,直接移除 diff --git a/matchserver/src/main/java/com/ljsd/jieling/redis/RedisKey.java b/matchserver/src/main/java/com/ljsd/jieling/redis/RedisKey.java index 8c165831d..caee1be9c 100644 --- a/matchserver/src/main/java/com/ljsd/jieling/redis/RedisKey.java +++ b/matchserver/src/main/java/com/ljsd/jieling/redis/RedisKey.java @@ -10,5 +10,7 @@ public class RedisKey { public static final String BLOODY_ROOM_ADDRESS = "BLOODY_ROOM_ADDRESS"; //房间服务器地址信息 public static final String USER_LOGIN_URL = "USER_LOGIN_URL"; //房间服务器地址信息 public static final String BLOODY_SERVER_INFO = "BLOODY_SERVER_INFO"; //房间服务器地址信息 + public static final String MATCH_SERVER_INFO = "MATCH_SERVER_INFO"; //匹配服务器地址信息 + public static final String MATCH_SIZE = "MATCH_SIZE"; //匹配人数设置 } diff --git a/matchserver/src/main/java/com/ljsd/jieling/redis/RedisUtil.java b/matchserver/src/main/java/com/ljsd/jieling/redis/RedisUtil.java index 35e72d337..491e3eac4 100644 --- a/matchserver/src/main/java/com/ljsd/jieling/redis/RedisUtil.java +++ b/matchserver/src/main/java/com/ljsd/jieling/redis/RedisUtil.java @@ -132,6 +132,16 @@ public class RedisUtil { } + public boolean sadd(String key,String member){ + try { + redisTemplate.opsForSet().add(key,member); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + diff --git a/serverlogic/src/main/java/com/ljsd/GameApplication.java b/serverlogic/src/main/java/com/ljsd/GameApplication.java index 0b0c836cf..a55aa3ced 100644 --- a/serverlogic/src/main/java/com/ljsd/GameApplication.java +++ b/serverlogic/src/main/java/com/ljsd/GameApplication.java @@ -2,6 +2,7 @@ package com.ljsd; import com.ljsd.common.mogodb.util.MongoKeys; import com.ljsd.jieling.config.ServerConfig; +import com.ljsd.jieling.config.json.CoreSettings; import com.ljsd.jieling.config.json.ServerConfiguration; import com.ljsd.jieling.config.json.ServerProperties; import com.ljsd.jieling.db.mongo.MongoUtil; @@ -66,7 +67,8 @@ public class GameApplication { ServerConfiguration serverConfiguration = configurableApplicationContext.getBean(ServerConfiguration.class); serverProperties = serverConfiguration.getServerProperties(); serverId = serverProperties.getId(); - areaId = serverProperties.getId(); + CoreSettings coreSettings = configurableApplicationContext.getBean(CoreSettings.class); + GameApplication.areaId = coreSettings.getArea(); LOGGER.info("ServerProperties ->{},coreIp=>{}", serverProperties.toString()); RedisUtil.getInstence().init(configurableApplicationContext); MongoUtil.getInstence().init(configurableApplicationContext); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java index 5ca9448b8..f0e081af5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SBloodyBattleSetting.java @@ -85,6 +85,8 @@ public class SBloodyBattleSetting implements BaseConfig { private int[][] scoreConversion; + private int reloadTime; + @Override public void init() throws Exception { @@ -292,4 +294,8 @@ public class SBloodyBattleSetting implements BaseConfig { public int[][] getScoreConversion() { return scoreConversion; } + + public int getReloadTime() { + return reloadTime; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index b63165899..befe89e81 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -166,6 +166,7 @@ public class RedisKey { public static final String BLOODY_TEAM = "BLOODY_TEAM"; public static final String BLOODY_SERVER_INFO = "BLOODY_SERVER_INFO"; public static final String BLOODY_PERSON_BATTLE_INFO = "BLOODY_PERSON_BATTLE_INFO"; + public static final String MATCH_SERVER_INFO = "MATCH_SERVER_INFO"; public static String getKey(String type, String key, boolean withoutServerId) { if(RedisKey.TOKEN.equals(type)||RedisKey.USER_SERVER_INFO.equals(type)){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 82e393107..e53a68deb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -876,6 +876,26 @@ public class RedisUtil { } } + public List getAllSetToList(String key, Class clazz){ + for(int i=0;i members = redisTemplate.opsForSet().members(key); + if(members!=null && !members.isEmpty()){ + List result = new ArrayList<>(members.size()); + for(String item : members){ + result.add(gson.fromJson(item,clazz)); + } + return result; + } + } catch (Exception e) { + TimeUtils.sleep(FAILED_SLEEP); + } + } + return null; + + } + public boolean sremove(String key,String member){ try { redisTemplate.opsForSet().remove(key,member); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java index fb9483df2..59d00cfcd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.handler.room; import com.google.gson.Gson; +import com.ljsd.GameApplication; import com.ljsd.jieling.bloody.UserBloodySnpInfo; import com.ljsd.jieling.config.SBloodyBattleSetting; import com.ljsd.jieling.core.GlobalsDef; @@ -22,11 +23,13 @@ import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.RoomProto; import com.ljsd.jieling.thrift.pool.ServiceKey; +import com.ljsd.jieling.util.MathUtils; 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.LoggerFactory; +import org.springframework.data.mongodb.monitor.ServerInfo; import org.springframework.stereotype.Component; import java.util.Calendar; @@ -73,7 +76,16 @@ public class RoomMatchRequestHandler extends BaseHandler{ User user = UserManager.getUser(iSession.getUid()); snapUserFightInfo(user); RedisUtil.getInstence().set(RedisKey.MATCH_UID_KEY + ":" + uid,gson.toJson("1")); - String serviceKey =StringUtil.getServiceKey(ServiceKey.RPCMATCH,"60.1.1.215","17900"); + List matchAddressInfos = RedisUtil.getInstence().getAllSetToList(RedisKey.MATCH_SERVER_INFO + ":" + GameApplication.areaId, String.class); + if(matchAddressInfos == null || matchAddressInfos.isEmpty()){ + LOGGER.error("没有匹配服务器"); + MessageUtil.sendErrorResponse(iSession,0,responseMsgId,"没有匹配服务器"); + return; + } + String rpcUrl = matchAddressInfos.get(MathUtils.randomInt(matchAddressInfos.size())); + String ip = rpcUrl.split(":")[0]; + String port = rpcUrl.split(":")[1]; + String serviceKey =StringUtil.getServiceKey(ServiceKey.RPCMATCH,ip,port); ClientAdapterPo rPCClient = null; try { rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); @@ -93,8 +105,8 @@ public class RoomMatchRequestHandler extends BaseHandler{ public static void snapUserFightInfo(User mine){ //血量处理 - // int myteamId = GlobalsDef.BLOODY_TEAM; - int myteamId = 1; + int myteamId = GlobalsDef.BLOODY_TEAM; + mine.getTeamPosManager().setCurTeamPosId(myteamId); PlayerManager playerInfoManager = mine.getPlayerInfoManager(); UserBloodySnpInfo userBloodySnpInfo = new UserBloodySnpInfo(mine.getId(),playerInfoManager.getNickName()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RPCServerTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RPCServerTask.java index 21ddecc59..f86b2f985 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RPCServerTask.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RPCServerTask.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.thread.task; import com.google.gson.Gson; import com.ljsd.CoreService; +import com.ljsd.GameApplication; import com.ljsd.jieling.config.json.CoreSettings; import com.ljsd.jieling.thrift.idl.RPCRequestIFace; import org.apache.thrift.TProcessor;