fix mission

back_recharge
wangyuan 2019-08-15 21:04:40 +08:00
parent ed50688201
commit 87c2c32a44
5 changed files with 65 additions and 6 deletions

View File

@ -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<PacketNetData> handlerLinkedQueue = new ConcurrentLinkedQueue();
public ConcurrentLinkedQueue<AyyncWorker> 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);
}
}

View File

@ -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<Integer> friends, List<Integer> 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;
}

View File

@ -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;
}

View File

@ -66,8 +66,8 @@ public class ProtocolsManager implements ProtocolsAbstract {
public static Map<MessageTypeProto.MessageType, String> gameMessageForLogin = new ConcurrentHashMap<>();
private Map<Integer, BaseHandler> 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();

View File

@ -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;
}