diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index 06d41b8b8..caeadf9f7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.logic.arena; import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; @@ -26,6 +27,7 @@ import com.ljsd.jieling.logic.hero.HeroLogic; 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.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.ArenaInfoProto; import com.ljsd.jieling.protocols.CommonProto; @@ -220,10 +222,11 @@ public class ArenaLogic { .setFightResult(fightResult) .build(); user.getUserMissionManager().onGameEvent(user, GameEvent.ARENA_CHALLENGE,fightResult, myscore + myscoreChange); - if(defUser!=null){ - user.getUserMissionManager().onGameEvent(defUser, GameEvent.ARENA_CHALLENGE,fightResult,defScore+defScoreChange); + if(defUser!=null) { +// user.getUserMissionManager().onGameEvent(defUser, GameEvent.ARENA_CHALLENGE,fightResult,defScore + defScoreChange); + AyyncWorker ayyncWorker = new AyyncWorker(defUser, true, new AynMissionWorker(GameEvent.ARENA_CHALLENGE, fightResult, defScore + defScoreChange)); + ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); } - Poster.getPoster().dispatchEvent(new ArenaChallengeEvent(user.getId())); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ARENA_CHALLENGE_RESPONSE_VALUE,build,true); KtEventUtils.onKtEvent(user, ParamEventBean.UserGameType,KTGameType.ARENA.getIndex(),challengeUid); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java index eb8fb7553..9e8e48b2d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java @@ -369,20 +369,8 @@ public class FriendLogic { } private void updateFriendUserInfo(User friendUser){ - AyyncWorker ayyncWorker = new AyyncWorker(friendUser, true, (user) -> - { - boolean isOnline = OnlineUserManager.checkUidOnline(user.getId()); - MissionEventDistributor.requestStart(); - user.getUserMissionManager().onGameEvent(user, GameEvent.FRIEND_NUMS, 1); - if (isOnline) { - ISession session = OnlineUserManager.getSessionByUid(user.getId()); - MissionEventDistributor.requestEnd(session, true); - } - MongoUtil.getInstence().lastUpdate(); - }) ; - ProtocolsManager instance = ProtocolsManager.getInstance(); - HandlerLogicThread handlerThread = instance.handlerThreads[friendUser.getId() % instance.HANDLER_THREAD_NUM]; - handlerThread.addAyyncWorker(ayyncWorker); + AyyncWorker ayyncWorker = new AyyncWorker(friendUser, true, new AynMissionWorker(GameEvent.FRIEND_NUMS,1)) ; + ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); } private int allApplyFriend(int uid, FriendManager friendManager, List friends, List applyFriends, int maxFriends) throws Exception { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 4ec4acf83..fa4409016 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -1128,9 +1128,7 @@ public class HeroLogic { } } }); - ProtocolsManager instance = ProtocolsManager.getInstance(); - HandlerLogicThread handlerThread = instance.handlerThreads[user.getId() % instance.HANDLER_THREAD_NUM]; - handlerThread.addAyyncWorker(ayyncWorker); + ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); } //天赋异妖加成 Map ringFireMap = pokemonManager.getRingFireMap(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 7420577e6..3a480c898 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -136,9 +136,7 @@ public class StoreLogic { private static void updateUsersStoreAyync(User user, AyncWorkerRunnable ayncWorkerRunnable){ AyyncWorker ayyncWorker = new AyyncWorker(user,true,ayncWorkerRunnable); - ProtocolsManager instance = ProtocolsManager.getInstance(); - HandlerLogicThread handlerThread = instance.handlerThreads[user.getId() % instance.HANDLER_THREAD_NUM]; - handlerThread.addAyyncWorker(ayyncWorker); + ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); } public static void getAllStoreInfo(ISession iSession) throws Exception { 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 9da13e065..7b000820e 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 @@ -25,6 +25,7 @@ import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocol.ProtocolsAbstract; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.session.GameSession; +import com.ljsd.jieling.util.AyyncWorker; import util.MathUtils; import com.ljsd.jieling.util.MessageUtil; import util.StringUtil; @@ -557,5 +558,10 @@ public class ProtocolsManager implements ProtocolsAbstract { { } } + + public void updateAyncWorker(AyyncWorker worker){ + HandlerLogicThread handlerThread = instance.handlerThreads[worker.getUser().getId() % instance.HANDLER_THREAD_NUM]; + handlerThread.addAyyncWorker(worker); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java index d6f96a78f..81b79c363 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/FetchBloodyEndDataThread.java @@ -36,9 +36,7 @@ public class FetchBloodyEndDataThread extends Thread{ AyyncWorker ayyncWorker = new AyyncWorker(user, true,(user1) -> BloodLogic.getInstance().calBloodyMissionInfo(user1,sortDataBean) ); - ProtocolsManager instance = ProtocolsManager.getInstance(); - HandlerLogicThread handlerThread = instance.handlerThreads[uid % instance.HANDLER_THREAD_NUM]; - handlerThread.addAyyncWorker(ayyncWorker); + ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); RedisUtil.getInstence().removeMapEntrys(RedisKey.BLOODY_PERSON_BATTLE_INFO, Integer.toString(GameApplication.serverId),Integer.toString(uid)); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/AynMissionWorker.java b/serverlogic/src/main/java/com/ljsd/jieling/util/AynMissionWorker.java new file mode 100644 index 000000000..78980d9a2 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/AynMissionWorker.java @@ -0,0 +1,32 @@ +package com.ljsd.jieling.util; + +import com.ljsd.jieling.db.mongo.MongoUtil; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; +import com.ljsd.jieling.network.session.ISession; + +/** + * @author lvxinran + * @date 2019/11/20 + * @discribe 更改其他用户任务线程 + */ +public class AynMissionWorker implements AyncWorkerRunnable { + GameEvent event; + Object[] param; + public void work(User user) throws Exception { + boolean isOnline = OnlineUserManager.checkUidOnline(user.getId()); + MissionEventDistributor.requestStart(); + user.getUserMissionManager().onGameEvent(user, event, param); + if (isOnline) { + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + MissionEventDistributor.requestEnd(session, true); + } + MongoUtil.getInstence().lastUpdate(); + } + public AynMissionWorker(GameEvent event,Object... param){ + this.event = event; + this.param = param; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java b/serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java index f00eb4019..4317a7ddb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java @@ -28,4 +28,8 @@ public class AyyncWorker{ public void setTask(boolean task) { isTask = task; } + + public User getUser() { + return user; + } }