From 87c2c32a447be430c004c91e41e8510ea9837251 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Thu, 15 Aug 2019 21:04:40 +0800 Subject: [PATCH] fix mission --- .../ljsd/jieling/core/HandlerLogicThread.java | 10 ++++++ .../jieling/logic/friend/FriendLogic.java | 32 ++++++++++++++++--- .../jieling/logic/mission/MissionType.java | 8 +++++ .../network/server/ProtocolsManager.java | 4 +-- .../com/ljsd/jieling/util/AyyncWorker.java | 17 ++++++++++ 5 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java b/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java index 39df40822..b828c05e8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java @@ -17,6 +17,7 @@ import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.AyyncWorker; import com.ljsd.jieling.util.MessageUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,6 +86,7 @@ public class HandlerLogicThread extends Thread{ } public ConcurrentLinkedQueue handlerLinkedQueue = new ConcurrentLinkedQueue(); + public ConcurrentLinkedQueue ayyncWorkerConcurrentLinkedQueue = new ConcurrentLinkedQueue(); @Override @@ -96,6 +98,10 @@ public class HandlerLogicThread extends Thread{ public void doWork(){ try { + AyyncWorker ayyncWorker =null; + while ( (ayyncWorker = ayyncWorkerConcurrentLinkedQueue.poll())!=null){ + ayyncWorker.exec(); + } PacketNetData packetNetData = handlerLinkedQueue.poll(); if(packetNetData == null){ Thread.sleep(2); @@ -270,4 +276,8 @@ public class HandlerLogicThread extends Thread{ public void addEntry(PacketNetData packetNetData){ handlerLinkedQueue.offer(packetNetData); } + + public void addAyyncWorker(AyyncWorker ayyncWorker){ + ayyncWorkerConcurrentLinkedQueue.offer(ayyncWorker); + } } 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 4e1aff117..252ca5f98 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 @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.friend; import com.ljsd.jieling.config.SGameSetting; +import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -13,14 +14,13 @@ import com.ljsd.jieling.logic.dao.PlayerManager; import com.ljsd.jieling.logic.dao.UserManager; 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.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.PlayerInfoProto; -import com.ljsd.jieling.util.CBean2Proto; -import com.ljsd.jieling.util.ItemUtil; -import com.ljsd.jieling.util.MessageUtil; -import com.ljsd.jieling.util.StringUtil; +import com.ljsd.jieling.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -274,6 +274,7 @@ public class FriendLogic { initFriendGriveAndRreward(friendId, uid, friendManager, friendfriendManager); sendFriendInfoIndication(uid,friendId,2); user.getUserMissionManager().onGameEvent(user,GameEvent.FRIEND_NUMS,1); + updateFriendUserInfo(friendUser); break; case 2://拒绝 applyFriends = friendManager.getApplyFriends(); @@ -292,6 +293,28 @@ public class FriendLogic { MessageUtil.sendMessage(iSession, 1, msgId, null, true); } + private void updateFriendUserInfo(User friendUser){ + AyyncWorker ayyncWorker = new AyyncWorker(friendUser,true) { + @Override + public void work(User user) throws Exception { + boolean isOnline = OnlineUserManager.checkUidOnline(user.getId()); + if(isOnline){ + 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); + } + private int allApplyFriend(int uid, FriendManager friendManager, List friends, List applyFriends, int maxFriends) throws Exception { User friendUser; FriendManager friendfriendManager; @@ -316,6 +339,7 @@ public class FriendLogic { initFriendGriveAndRreward(applyfriendId, uid, friendManager, friendfriendManager); sendFriendInfoIndication(uid,applyfriendId,2); nums++; + updateFriendUserInfo(friendUser); } return nums; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index 7f3845859..0adf1add9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -191,6 +191,14 @@ public enum MissionType { return ONE_HERO_UP_STAR_TIMES; case 51: return HERO_IN_TEAM_NUMS; + case 52: + return BUY_GROCERY_TIMES; + case 53: + return FRIEND_NUMS; + case 54: + return GIVE_FRIEND_STAMIN_TIMES; + case 55: + return HERO_UP_SOME_STAR_TIMES; default: return null; } 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 975d44816..25f5f4e9a 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 @@ -66,8 +66,8 @@ public class ProtocolsManager implements ProtocolsAbstract { public static Map gameMessageForLogin = new ConcurrentHashMap<>(); private Map handlers = new HashMap<>(); - public final int HANDLER_THREAD_NUM = 50; - public HandlerLogicThread[] handlerThreads = new HandlerLogicThread[HANDLER_THREAD_NUM]; + public final int HANDLER_THREAD_NUM = 50; + public HandlerLogicThread[] handlerThreads = new HandlerLogicThread[HANDLER_THREAD_NUM]; private ProtocolsManager() { initContext(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java b/serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java new file mode 100644 index 000000000..84af8e9a2 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/AyyncWorker.java @@ -0,0 +1,17 @@ +package com.ljsd.jieling.util; + +import com.ljsd.jieling.logic.dao.root.User; + +public abstract class AyyncWorker { + private User user; + private boolean isTask; + public AyyncWorker(User user,boolean isTask){ + this.user = user; + this.isTask = isTask; + } + public void exec() throws Exception { + work(user); + } + public abstract void work(User user) throws Exception; + +}