diff --git a/event/src/main/java/com/zfoo/event/EventContext.java b/event/src/main/java/com/zfoo/event/EventContext.java index 560d0fa3..70a748f6 100644 --- a/event/src/main/java/com/zfoo/event/EventContext.java +++ b/event/src/main/java/com/zfoo/event/EventContext.java @@ -26,7 +26,6 @@ import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.core.Ordered; -import java.lang.reflect.Field; import java.util.concurrent.ExecutorService; /** @@ -49,13 +48,13 @@ public class EventContext implements ApplicationListener, } - public synchronized static void shutdownBefore() { + public synchronized void shutdownBefore() { SchedulerContext.shutdown(); } - public static synchronized void shutdownAfter() { + public synchronized void shutdownAfter() { // 关闭zookeeper的客户端 - NetContext.getConfigManager().getRegistry().shutdown(); - + configManager.getRegistry().shutdown(); // 先关闭所有session - NetContext.getSessionManager().shutdown(); + IOUtils.closeIO(ArrayUtils.listToArray(new ArrayList<>(sessionManager.getClientSessionMap().values()), Session.class)); + IOUtils.closeIO(ArrayUtils.listToArray(new ArrayList<>(sessionManager.getServerSessionMap().values()), Session.class)); // 关闭客户端和服务器 - TcpClient.shutdown(); + AbstractClient.shutdown(); AbstractServer.shutdownAllServers(); // 关闭TaskManager try { - Field field = EventBus.class.getDeclaredField("executors"); + Field field = TaskManager.class.getDeclaredField("executors"); ReflectionUtils.makeAccessible(field); var executors = (ExecutorService[]) ReflectionUtils.getField(field, TaskManager.getInstance()); diff --git a/net/src/main/java/com/zfoo/net/session/manager/ISessionManager.java b/net/src/main/java/com/zfoo/net/session/manager/ISessionManager.java index 5fee942c..762e67a5 100644 --- a/net/src/main/java/com/zfoo/net/session/manager/ISessionManager.java +++ b/net/src/main/java/com/zfoo/net/session/manager/ISessionManager.java @@ -42,6 +42,4 @@ public interface ISessionManager { int getClientSessionChangeId(); - void shutdown(); - } diff --git a/net/src/main/java/com/zfoo/net/session/manager/SessionManager.java b/net/src/main/java/com/zfoo/net/session/manager/SessionManager.java index f21f9842..0b75bbf9 100644 --- a/net/src/main/java/com/zfoo/net/session/manager/SessionManager.java +++ b/net/src/main/java/com/zfoo/net/session/manager/SessionManager.java @@ -110,24 +110,4 @@ public class SessionManager implements ISessionManager { return clientSessionChangeId; } - @Override - public synchronized void shutdown() { - clientSessionMap.values().forEach(it -> { - try { - it.close(); - } catch (Exception e) { - logger.error("关闭[session:{}]发生未知异常", SessionUtils.sessionInfo(it), e); - } - }); - - serverSessionMap.values().forEach(it -> { - try { - it.close(); - } catch (Exception e) { - logger.error("关闭[session:{}]发生未知异常", SessionUtils.sessionInfo(it), e); - } - }); - - logger.info("已关闭客户端和服务器所有的session"); - } } diff --git a/net/src/main/java/com/zfoo/net/session/model/Session.java b/net/src/main/java/com/zfoo/net/session/model/Session.java index 397cc62e..54994588 100644 --- a/net/src/main/java/com/zfoo/net/session/model/Session.java +++ b/net/src/main/java/com/zfoo/net/session/model/Session.java @@ -16,6 +16,7 @@ package com.zfoo.net.session.model; import com.zfoo.protocol.util.StringUtils; import io.netty.channel.Channel; +import java.io.Closeable; import java.util.EnumMap; import java.util.Map; import java.util.Objects; @@ -25,7 +26,7 @@ import java.util.concurrent.atomic.AtomicLong; * @author jaysunxiao * @version 3.0 */ -public class Session { +public class Session implements Closeable { private static final AtomicLong ATOMIC_LONG = new AtomicLong(0); @@ -73,6 +74,11 @@ public class Session { return Objects.hash(sid); } + @Override + public void close() { + channel.close(); + } + public long getSid() { return sid; } @@ -98,7 +104,4 @@ public class Session { return channel; } - public void close() { - channel.close(); - } }