From 63a587862c173d661672610c22b0651a0a2cd88e Mon Sep 17 00:00:00 2001 From: wangyuan Date: Wed, 18 Sep 2019 20:41:32 +0800 Subject: [PATCH] fix gm --- .../com/ljsd/jieling/kefu/Cmd_changename.java | 2 +- .../ljsd/jieling/util/InnerMessageUtil.java | 51 +++++++++++++++---- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_changename.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_changename.java index 516a2a0ff..c91cdedf8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_changename.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_changename.java @@ -30,7 +30,7 @@ public class Cmd_changename extends GmRoleAbstract { if(args.length>=2){ User user = getUser(); if("hotfix".equals(args[2])){ - + LOGGER.info("hotfix user={},thread={}",user.getId(),Thread.currentThread().getName()); MongoUtil.getLjsdMongoTemplate().save(user); } if("force".equals(args[2])){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/InnerMessageUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/InnerMessageUtil.java index 2391e7315..fbeee8ae8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/InnerMessageUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/InnerMessageUtil.java @@ -7,6 +7,8 @@ import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.thread.ThreadManager; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class InnerMessageUtil { @@ -20,18 +22,45 @@ public class InnerMessageUtil { /** * 通知所有在线玩家 随机时间 /s */ - public static void broadcastWithRandom(AyyncWorker ayyncWorker, List sendId, int timeBound) { - for (Integer id : sendId) { - ThreadManager.getScheduledExecutor().schedule(() -> { + public static void broadcastWithRandom(AyyncWorker ayyncWorker, List sendId, int timeBound) throws InterruptedException { + + ExecutorService executorService = Executors.newFixedThreadPool(1); + executorService.execute(new Runnable() { + @Override + public void run() { try { - ayyncWorker.setTask(true); - ayyncWorker.setUser(UserManager.getUser(id)); - ProtocolsManager instance = ProtocolsManager.getInstance(); - HandlerLogicThread handlerThread = instance.handlerThreads[id % instance.HANDLER_THREAD_NUM]; - handlerThread.addAyyncWorker(ayyncWorker); - }catch (Exception e){} - }, MathUtils.randomInt(timeBound), TimeUnit.SECONDS); - } + int lastUid=0; + for (Integer id : sendId) { + User userInMem = UserManager.getUserInMem(id); + if(userInMem == null){ + continue; + } + ProtocolsManager instance = ProtocolsManager.getInstance(); + if(lastUid!=0){ + HandlerLogicThread handlerThread = instance.handlerThreads[lastUid % instance.HANDLER_THREAD_NUM]; + int retryTimes = 30; + while ( !handlerThread.ayyncWorkerConcurrentLinkedQueue.isEmpty()){ + Thread.sleep(50); + retryTimes--; + if(retryTimes<0){ + System.out.println("fail fail ---------------------->>>>>fail.."); + return; + } + } + Thread.sleep(50); + } + HandlerLogicThread handlerThread = instance.handlerThreads[id % instance.HANDLER_THREAD_NUM]; + ayyncWorker.setTask(true); + ayyncWorker.setUser(userInMem); + handlerThread.addAyyncWorker(ayyncWorker); + lastUid =id; + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }); + } }