From 2035fbb2abbf700a49b35111c5bb42bcc4ae4038 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Wed, 18 Aug 2021 23:12:50 +0800 Subject: [PATCH] =?UTF-8?q?feat[net]:=20=E6=96=B0=E5=A2=9EClientSession?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=9A=84=E4=BA=8B=E4=BB=B6=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/event/AppStartBeforeEvent.java | 31 ++++++++++++++ .../tcp/model/ClientSessionInactiveEvent.java | 40 +++++++++++++++++++ .../net/handler/ClientDispatcherHandler.java | 21 ++++++---- 3 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 event/src/main/java/com/zfoo/event/model/event/AppStartBeforeEvent.java create mode 100644 net/src/main/java/com/zfoo/net/core/tcp/model/ClientSessionInactiveEvent.java diff --git a/event/src/main/java/com/zfoo/event/model/event/AppStartBeforeEvent.java b/event/src/main/java/com/zfoo/event/model/event/AppStartBeforeEvent.java new file mode 100644 index 00000000..04519b01 --- /dev/null +++ b/event/src/main/java/com/zfoo/event/model/event/AppStartBeforeEvent.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.event.model.event; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.event.ApplicationContextEvent; + +/** + * 应用启动事件,这个使用spring自带的事件机制,自研的event事件仅用在业务逻辑 + * + * @author jaysunxiao + * @version 3.0 + */ +public class AppStartBeforeEvent extends ApplicationContextEvent { + + public AppStartBeforeEvent(ApplicationContext context) { + super(context); + } + +} diff --git a/net/src/main/java/com/zfoo/net/core/tcp/model/ClientSessionInactiveEvent.java b/net/src/main/java/com/zfoo/net/core/tcp/model/ClientSessionInactiveEvent.java new file mode 100644 index 00000000..ea067bc1 --- /dev/null +++ b/net/src/main/java/com/zfoo/net/core/tcp/model/ClientSessionInactiveEvent.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.net.core.tcp.model; + +import com.zfoo.event.model.event.IEvent; +import com.zfoo.net.session.model.Session; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class ClientSessionInactiveEvent implements IEvent { + + private Session session; + + public static ClientSessionInactiveEvent valueOf(Session session) { + var event = new ClientSessionInactiveEvent(); + event.session = session; + return event; + } + + public Session getSession() { + return session; + } + + public void setSession(Session session) { + this.session = session; + } +} diff --git a/net/src/main/java/com/zfoo/net/handler/ClientDispatcherHandler.java b/net/src/main/java/com/zfoo/net/handler/ClientDispatcherHandler.java index 79e16f54..4e024b30 100644 --- a/net/src/main/java/com/zfoo/net/handler/ClientDispatcherHandler.java +++ b/net/src/main/java/com/zfoo/net/handler/ClientDispatcherHandler.java @@ -13,7 +13,9 @@ package com.zfoo.net.handler; +import com.zfoo.event.manager.EventBus; import com.zfoo.net.NetContext; +import com.zfoo.net.core.tcp.model.ClientSessionInactiveEvent; import com.zfoo.net.session.model.AttributeType; import com.zfoo.net.util.SessionUtils; import io.netty.channel.ChannelHandler; @@ -41,15 +43,20 @@ public class ClientDispatcherHandler extends BaseDispatcherHandler { super.channelInactive(ctx); var session = SessionUtils.getSession(ctx); - if (session != null) { - var consumeAttribute = session.getAttribute(AttributeType.CONSUMER); - NetContext.getSessionManager().removeClientSession(session); - // 如果是消费者inactive,还需要触发客户端消费者检查事件,以便重新连接 - if (consumeAttribute != null) { - NetContext.getConfigManager().getRegistry().checkConsumer(); - } + if (session == null) { + return; } + + var consumeAttribute = session.getAttribute(AttributeType.CONSUMER); + NetContext.getSessionManager().removeClientSession(session); + EventBus.asyncSubmit(ClientSessionInactiveEvent.valueOf(session)); + + // 如果是消费者inactive,还需要触发客户端消费者检查事件,以便重新连接 + if (consumeAttribute != null) { + NetContext.getConfigManager().getRegistry().checkConsumer(); + } + logger.warn("[channel:{}] is inactive", SessionUtils.sessionInfo(ctx)); }