From 134c7793732ca4eead0196ace4724f2811cb21ed Mon Sep 17 00:00:00 2001 From: gaojie Date: Wed, 3 Jul 2019 19:15:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- serverlogic/build.gradle | 3 +- .../config/reportData/DataMessageUtils.java | 48 +++++++++++++++++++ .../jieling/config/reportData/LoginFlow.java | 5 -- .../jieling/config/reportData/TlogThread.java | 21 ++++++++ .../handler/RefreshItemNumHandler.java | 27 +++++++++++ .../ljsd/jieling/handler/map/MapManager.java | 2 +- .../ljsd/jieling/handler/map/SweepLogic.java | 2 + .../ljsd/jieling/logic/item/ItemLogic.java | 35 ++++++++++++++ .../network/server/ProtocolsManager.java | 2 +- .../com/ljsd/jieling/util/CBean2Proto.java | 10 ++++ 10 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/reportData/LoginFlow.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/config/reportData/TlogThread.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/RefreshItemNumHandler.java diff --git a/serverlogic/build.gradle b/serverlogic/build.gradle index ad4ad3f4c..15fb3eda0 100644 --- a/serverlogic/build.gradle +++ b/serverlogic/build.gradle @@ -29,7 +29,8 @@ dependencies { compile group: 'com.googlecode.protobuf-java-format', name: 'protobuf-java-format', version: '1.2' compile group: 'com.google.code.gson', name: 'gson', version: '2.2.4' compile("org.luaj:luaj-jse:3.0.1") - compile("org.apache.thrift:libthrift:0.9.2"); + compile("org.apache.thrift:libthrift:0.9.2") + compile("com.alibaba:fastjson:1.2.47") compile files("${System.properties['java.home']}/../lib/tools.jar") } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java b/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java new file mode 100644 index 000000000..ddc6eeb9c --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/DataMessageUtils.java @@ -0,0 +1,48 @@ +package com.ljsd.jieling.config.reportData; + +import com.alibaba.fastjson.JSON; +import com.ljsd.common.mogodb.util.BlockingUniqueQueue; + +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CopyOnWriteArrayList; + +public class DataMessageUtils { + + static final BlockingQueue logQueue = new BlockingUniqueQueue<>(); + static List dataList = new CopyOnWriteArrayList<>(); + //入队列 + public static void addLogQueue(String info){ + logQueue.offer(info); + } + //出队列 + public static Object take(){ + try { + return logQueue.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + return null; + } + } + + public static void manageData(Object take) { + List sendDataList; + if(dataList.size() >= 10){ + sendDataList = dataList; + dataList = new CopyOnWriteArrayList<>(); + }else{ + dataList.add(JSON.toJSONString(take)); + return; + } + StringBuilder info = new StringBuilder("["); + for (int i =0 ; i < sendDataList.size() ; i++){ + if (i <= (sendDataList.size() -1)){ + info.append(sendDataList.get(i)).append(","); + }else{ + info.append(sendDataList.get(i)); + } + } + info.append("]"); + System.out.println(info.toString()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/LoginFlow.java b/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/LoginFlow.java deleted file mode 100644 index c4293a29f..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/LoginFlow.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ljsd.jieling.config.reportData; - -public class LoginFlow { - -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/TlogThread.java b/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/TlogThread.java new file mode 100644 index 000000000..0349a121b --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/reportData/TlogThread.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.config.reportData; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class TlogThread implements Runnable { + @Override + public void run() { + while (true) { + Object take = DataMessageUtils.take(); + DataMessageUtils.manageData(take); + } + } + public static void startTlogThread(){ + ExecutorService pool = Executors.newCachedThreadPool(); + for (int i = 0; i <= 5 ; i++){ + TlogThread myThread = new TlogThread(); + pool.execute(myThread); + } + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/RefreshItemNumHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/RefreshItemNumHandler.java new file mode 100644 index 000000000..91b165d96 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/RefreshItemNumHandler.java @@ -0,0 +1,27 @@ +package com.ljsd.jieling.handler; + +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.logic.item.ItemLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.protocols.PlayerInfoProto; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class RefreshItemNumHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.REFRESH_ITEM_NUM_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + PlayerInfoProto.RefreshItemNumRequest refreshItemNumRequest = PlayerInfoProto.RefreshItemNumRequest.parseFrom(netData.parseClientProtoNetData()); + List itemIdList = refreshItemNumRequest.getItemIdList(); + ItemLogic.getInstance().refreshItemNum(iSession,itemIdList); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index 8f69d4ddc..e154a0c58 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -257,8 +257,8 @@ public class MapManager extends MongoBase { if (addValue != 0) { int curEnergy = MathUtils.setBetweenWithMax(itemNum + addValue, 0, playerInfoManager.getMaxStamina()); item.setItemNum(curEnergy > playerInfoManager.getMaxStamina() ? playerInfoManager.getMaxStamina() : curEnergy); - setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime); } + setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime); } else { setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java index 140c98282..e7abaa271 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/SweepLogic.java @@ -11,6 +11,7 @@ import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.FightInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.CBean2Proto; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; import com.ljsd.jieling.util.StringUtil; @@ -104,6 +105,7 @@ public class SweepLogic { LOGGER.info("sweepFight=>uid={},sweepTimes={},exp={}",uid,sweepTimes,sLevelDifficultyConfig.getExp()); FightInfoProto.SweepRightResponse.Builder builder = FightInfoProto.SweepRightResponse.newBuilder(); builder.addAllDrop(dropList); + builder.setItemInfo(CBean2Proto.getItemInfo(user.getItemManager().getItemMap().get(Global.STAMINA))); levelDifficulty.setChallengeTimes(levelDifficulty.getChallengeTimes() +sweepTimes); user.getUserMissionManager().onGameEvent(user, GameEvent.STORY_FIGHT, fightId, 0,sweepTimes); MessageUtil.sendMessage(session, 1, messageType.getNumber(), builder.build(), true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index a5b096ada..430c22fac 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -2,6 +2,8 @@ package com.ljsd.jieling.logic.item; import com.ljsd.jieling.config.*; import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; @@ -14,6 +16,7 @@ import com.sun.org.apache.regexp.internal.RE; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -247,4 +250,36 @@ public class ItemLogic { return ""; } + + /** + * 同步刷新道具数量 + * @param iSession + * @param itemIdList + */ + public void refreshItemNum(ISession iSession, List itemIdList) throws Exception { + int msgId = MessageTypeProto.MessageType.REFRESH_ITEM_NUM_RESPONSE_VALUE; + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + Map itemMap = user.getItemManager().getItemMap(); + List itemList = new ArrayList<>(); + for (Integer itemId :itemIdList){ + SItem sItem = SItem.getsItemMap().get(itemId); + if (sItem == null){ + continue; + } + if (itemId == Global.STAMINA){ + MapManager.getEnergy(user); + itemList.add(itemMap.get(itemId)); + } + } + PlayerInfoProto.RefreshItemNumResponse.Builder builder = PlayerInfoProto.RefreshItemNumResponse.newBuilder(); + List itemInfos = new ArrayList<>(); + if (itemList.size() != 0){ + for (Item item : itemList){ + itemInfos.add(CBean2Proto.getItemInfo(item)); + } + } + builder.addAllItemInfo(itemInfos); + MessageUtil.sendMessage(iSession,1, msgId,builder.build(),true); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java b/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java index bd5de4e39..43c59fa1e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java @@ -125,7 +125,7 @@ public class ProtocolsManager implements ProtocolsAbstract { final ISession session = (ISession) gameSession; PacketNetData packetNetData = new PacketNetData((byte[]) obj); int msgId = packetNetData.getMsgId(); - LOGGER.info("uid={},msgId={},index={}",packetNetData.getUserId(),msgId,packetNetData.getIndex()); +// LOGGER.info("uid={},msgId={},index={}",packetNetData.getUserId(),msgId,packetNetData.getIndex()); // MessageTypeProto.MessageType messageType = MessageTypeProto.MessageType.valueOf(msgId); // FileWriter fw = null; // if (!gameMessageForLogin.containsKey(messageType)){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index 85ff70dad..d55fa2ac4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.util; +import com.ljsd.jieling.config.SGameSetting; import com.ljsd.jieling.config.SMonsterConfig; import com.ljsd.jieling.handler.map.Cell; import com.ljsd.jieling.handler.map.MapManager; @@ -317,4 +318,13 @@ public class CBean2Proto { return builder.build(); } + public static CommonProto.ItemInfo getItemInfo(Item item) { + CommonProto.ItemInfo.Builder builder = CommonProto.ItemInfo.newBuilder(); + builder.setTemplateId(item.getItemId()); + builder.setOverlap(item.getItemNum()); + int[] energyRecoverSpeed = SGameSetting.getGameSetting().getEnergyRecoverSpeed(); + builder.setNextRefreshTime(item.getEndingTime() + energyRecoverSpeed[1]*60); + System.out.println("===============" +(item.getEndingTime() + energyRecoverSpeed[1]*60)); + return builder.build(); + } }