mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-19 14:16:20 +00:00
feat[net]: 新增ClientSession关闭的事件回调
This commit is contained in:
1 parent
40d91369d9
commit
2035fbb2ab
3 files changed
+85
-7
No files matched your search
@@ -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;
|
package com.zfoo.net.handler;
|
||||||
|
|
||||||
|
import com.zfoo.event.manager.EventBus;
|
||||||
import com.zfoo.net.NetContext;
|
import com.zfoo.net.NetContext;
|
||||||
|
import com.zfoo.net.core.tcp.model.ClientSessionInactiveEvent;
|
||||||
import com.zfoo.net.session.model.AttributeType;
|
import com.zfoo.net.session.model.AttributeType;
|
||||||
import com.zfoo.net.util.SessionUtils;
|
import com.zfoo.net.util.SessionUtils;
|
||||||
import io.netty.channel.ChannelHandler;
|
import io.netty.channel.ChannelHandler;
|
||||||
@@ -41,15 +43,20 @@ public class ClientDispatcherHandler extends BaseDispatcherHandler {
|
|||||||
super.channelInactive(ctx);
|
super.channelInactive(ctx);
|
||||||
|
|
||||||
var session = SessionUtils.getSession(ctx);
|
var session = SessionUtils.getSession(ctx);
|
||||||
if (session != null) {
|
|
||||||
var consumeAttribute = session.getAttribute(AttributeType.CONSUMER);
|
|
||||||
NetContext.getSessionManager().removeClientSession(session);
|
|
||||||
|
|
||||||
// 如果是消费者inactive,还需要触发客户端消费者检查事件,以便重新连接
|
if (session == null) {
|
||||||
if (consumeAttribute != null) {
|
return;
|
||||||
NetContext.getConfigManager().getRegistry().checkConsumer();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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));
|
logger.warn("[channel:{}] is inactive", SessionUtils.sessionInfo(ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user