mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-05-20 01:26:23 +00:00
feat[net]: 新增ClientSession关闭的事件回调
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user