feat[net]: 新增ClientSession关闭的事件回调

This commit is contained in:
jaysunxiao
2021-08-18 23:12:50 +08:00
parent 40d91369d9
commit 2035fbb2ab
3 changed files with 85 additions and 7 deletions
@@ -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);
}
}
@@ -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;
}
}
@@ -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));
}