项目:happylifeplat-transaction
文件:NettyClientMessageHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
//心跳配置
if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.READER_IDLE) {
SpringBeanUtils.getInstance().getBean(NettyClientService.class).doConnect();
} else if (event.state() == IdleState.WRITER_IDLE) {
//表示已经多久没有发送数据了
HEART_BEAT.setAction(NettyMessageActionEnum.HEART.getCode());
ctx.writeAndFlush(HEART_BEAT);
LogUtil.debug(LOGGER,() -> "向服务端发送的心跳");
} else if (event.state() == IdleState.ALL_IDLE) {
//表示已经多久既没有收到也没有发送数据了
SpringBeanUtils.getInstance().getBean(NettyClientService.class).doConnect();
}
}
}
项目:JavaQuarkBBS
文件:UserAuthHandler.java
/**
* 内部链路检测
* @param ctx
* @param evt
* @throws Exception
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
//当通道空闲时由IdleStateHandler触发的用户事件
if (evt instanceof IdleStateEvent){
IdleStateEvent event = (IdleStateEvent) evt;
// 判断Channel是否读空闲,读空闲时移除Channel
if (event.state().equals(IdleState.READER_IDLE)) {
final String address = NettyUtil.parseChannelRemoteAddr(ctx.channel());
logger.warn("Netty Server UserAuthHandler: IDLE exception :{}",address);
manager.removeChannel(ctx.channel());
//广播用户数量
manager.broadMessage(QuarkChatProtocol.buildSysUserInfo(manager.getUsers()));
}
}
}
项目:tx-lcn
文件:TransactionHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
//心跳配置
if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.READER_IDLE) {
//表示已经多久没有收到数据了
//ctx.close();
} else if (event.state() == IdleState.WRITER_IDLE) {
//表示已经多久没有发送数据了
SocketUtils.sendMsg(ctx,heartJson);
logger.info("心跳数据---" + heartJson);
} else if (event.state() == IdleState.ALL_IDLE) {
//表示已经多久既没有收到也没有发送数据了
}
}
}
项目:rocketmq-rocketmq-all-4.1.0-incubating
文件:NettyRemotingClient.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state().equals(IdleState.ALL_IDLE)) {
final String remoteAddress = RemotingHelper.parseChannelRemoteAddr(ctx.channel());
log.warn("NETTY CLIENT PIPELINE: IDLE exception [{}]",remoteAddress);
closeChannel(ctx.channel());
if (NettyRemotingClient.this.channelEventListener != null) {
NettyRemotingClient.this
.putNettyEvent(new NettyEvent(NettyEventType.IDLE,remoteAddress,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:rocketmq-rocketmq-all-4.1.0-incubating
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
/**
*IdleStateEvent事件,在指定时间没有进行读写,会进行回调
*/
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state().equals(IdleState.ALL_IDLE)) {
final String remoteAddress = RemotingHelper.parseChannelRemoteAddr(ctx.channel());
log.warn("NETTY SERVER PIPELINE: IDLE exception [{}]",remoteAddress);
RemotingUtil.closeChannel(ctx.channel()); //关闭channel
if (NettyRemotingServer.this.channelEventListener != null) {
NettyRemotingServer.this
.putNettyEvent(new NettyEvent(NettyEventType.IDLE,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:GoPush
文件:NodeChannelInBoundHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
Channel channel = ctx.channel();
if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.ALL_IDLE) {
//发送心跳
channel.writeAndFlush(PING);
}
if (event.state() == IdleState.READER_IDLE) {
//发送心跳
channel.writeAndFlush(PING);
}
if (event.state() == IdleState.WRITER_IDLE) {
channel.writeAndFlush(PING);
}
} else {
super.userEventTriggered(ctx,evt);
}
}
项目:GoPush
文件:NodeChannelInBoundHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
Channel channel = ctx.channel();
dataCenterChannelStore.isDcChannelToSave(channel);
if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.ALL_IDLE) {
//发送心跳
channel.writeAndFlush(PING);
}
if (event.state() == IdleState.READER_IDLE) {
//发送心跳
channel.writeAndFlush(PING);
}
if (event.state() == IdleState.WRITER_IDLE) {
channel.writeAndFlush(PING);
}
} else {
super.userEventTriggered(ctx,evt);
}
}
项目:GoPush
文件:DeviceChannelInboundHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.READER_IDLE) {
ctx.writeAndFlush(PING);
}
if (event.state() == IdleState.WRITER_IDLE) {
ctx.writeAndFlush(PING);
}
if (event.state() == IdleState.ALL_IDLE) {
ctx.writeAndFlush(PING);
}
} else {
super.userEventTriggered(ctx,evt);
}
}
项目:reading-and-annotate-rocketmq-3.4.6
文件:NettyRemotingClient.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent evnet = (IdleStateEvent) evt;
if (evnet.state().equals(IdleState.ALL_IDLE)) {
final String remoteAddress = RemotingHelper.parseChannelRemoteAddr(ctx.channel());
log.warn("NETTY CLIENT PIPELINE: IDLE exception [{}]",remoteAddress);
closeChannel(ctx.channel());
if (NettyRemotingClient.this.channelEventListener != null) {
NettyRemotingClient.this.putNettyEvent(new NettyEvent(NettyEventType.IDLE,remoteAddress.toString(),ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:reading-and-annotate-rocketmq-3.4.6
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent evnet = (IdleStateEvent) evt;
if (evnet.state().equals(IdleState.ALL_IDLE)) {
final String remoteAddress = RemotingHelper.parseChannelRemoteAddr(ctx.channel());
log.warn("NETTY SERVER PIPELINE: IDLE exception [{}]",remoteAddress);
RemotingUtil.closeChannel(ctx.channel());
if (NettyRemotingServer.this.channelEventListener != null) {
NettyRemotingServer.this
.putNettyEvent(new NettyEvent(NettyEventType.IDLE,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:ConfigCenter
文件:NettyRemotingClient.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,remoteAddress);
closeChannel(ctx.channel());
if (NettyRemotingClient.this.channelEventListener != null) {
NettyRemotingClient.this
.putNettyEvent(new NettyEvent(NettyEventType.IDLE,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:ConfigCenter
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,remoteAddress);
RemotingUtil.closeChannel(ctx.channel());
if (NettyRemotingServer.this.channelEventListener != null) {
NettyRemotingServer.this
.putNettyEvent(new NettyEvent(NettyEventType.IDLE,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:HappyChat
文件:UserAuthHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent evnet = (IdleStateEvent) evt;
// 判断Channel是否读空闲,读空闲时移除Channel
if (evnet.state().equals(IdleState.READER_IDLE)) {
final String remoteAddress = NettyUtil.parseChannelRemoteAddr(ctx.channel());
logger.warn("NETTY SERVER PIPELINE: IDLE exception [{}]",remoteAddress);
UserInfoManager.removeChannel(ctx.channel());
UserInfoManager.broadCastInfo(ChatCode.SYS_USER_COUNT,UserInfoManager.getAuthUserCount());
}
}
ctx.fireUserEventTriggered(evt);
}
项目:qonduit
文件:WebSocketRequestDecoder.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent idle = (IdleStateEvent) evt;
if (idle.state() == IdleState.READER_IDLE) {
// We have not read any data from client in a while,let's close
// the subscriptions for this context.
LOG.info("Client {} is idle",ctx.channel());
}
} else if (evt instanceof SslCompletionEvent) {
SslCompletionEvent ssl = (SslCompletionEvent) evt;
if (!ssl.isSuccess()) {
LOG.error("SSL error: {}",ssl.getClass().getSimpleName(),ssl.cause());
}
} else {
LOG.warn("Received unhandled user event {}",evt);
}
}
项目:sds
文件:SocketHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
//心跳配置
if (IdleStateEvent.class.isAssignableFrom(evt.getClass())&& socketService.getSocketEventService().hasOpenHeartCheck()) {
IdleStateEvent event = (IdleStateEvent) evt;
String uniqueKey = ctx.channel().remoteAddress().toString();
if (event.state() == IdleState.READER_IDLE) {
//表示已经多久没有收到数据了
socketService.getSocketEventService().onHeartNoReadDataListener(ctx,uniqueKey);
} else if (event.state() == IdleState.WRITER_IDLE) {
//表示已经多久没有发送数据了
socketService.getSocketEventService().onHeartNoWriteDataListener(ctx,uniqueKey);
} else if (event.state() == IdleState.ALL_IDLE) {
//表示已经多久既没有收到也没有发送数据了
}
}
}
项目:rmq4note
文件:NettyRemotingClient.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:rmq4note
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:jeesupport
文件:NettyHandler.java
/**
* 利用事件变化来做心跳检测
*/
@Override
public void userEventTriggered( ChannelHandlerContext _ctx,Object _obj ) throws Exception {
logger.debug( _handler_info( _ctx,"userEventTriggered" ) );
if ( _obj instanceof IdleStateEvent ) {
IdleStateEvent event = ( IdleStateEvent ) _obj;
if ( event.state() == IdleState.READER_IDLE ) {
lost++;
logger.debug( _handler_info( _ctx," inactive with=" + lost ) );
if ( lost > 2 ) {
handler.stand( _ctx );
logger.debug( _handler_info( _ctx," was stand with=" + lost ) );
}
}
} else {
logger.warn( _handler_info( _ctx," was discard" ) );
}
}
项目:java_learn
文件:ServerHandler.java
@Override
public void userEventTriggered(final ChannelHandlerContext ctx,Object evt)
throws Exception {
if(evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.READER_IDLE) {
System.out.println("--- Reader Idle ---");
ctx.writeAndFlush("读取等待:客户端你在吗... ...\r\n");
} else if (event.state() == IdleState.WRITER_IDLE) {
System.out.println("--- Write Idle ---");
ctx.writeAndFlush("写入等待:客户端你在吗... ...\r\n");
} else if (event.state() == IdleState.ALL_IDLE) {
System.out.println("--- All_IDLE ---");
ctx.writeAndFlush("全部时间:客户端你在吗... ...\r\n");
}
}else{
super.userEventTriggered(ctx,evt);
}
}
项目:study-netty
文件:HeartbeatServerHandler.java
/**
* 判断是否是IdleStateEvent事件,是则处理
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if(evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
String type = "";
if(event.state() == IdleState.READER_IDLE)
type = "read idle";
else if(event.state() == IdleState.WRITER_IDLE)
type = "write idle";
else if(event.state() == IdleState.ALL_IDLE)
type = "all idle";
//
ChannelFuture f = ctx.writeAndFlush(HEARTBEAT_SEQUENCE.duplicate());
f.addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
System.out.println(ctx.channel().remoteAddress() + "超时类型 : " + type);
} else {
super.userEventTriggered(ctx,evt);
}
}
项目:timely
文件:WebSocketRequestDecoder.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,let's close
// the subscriptions for this context.
String subscriptionId = ctx.channel().attr(SubscriptionRegistry.SUBSCRIPTION_ID_ATTR).get();
if (!StringUtils.isEmpty(subscriptionId)) {
if (SubscriptionRegistry.get().containsKey(subscriptionId)) {
LOG.info("Closing subscription with subscription id {} due to idle event",subscriptionId);
SubscriptionRegistry.get().get(subscriptionId).close();
}
} else {
LOG.warn("Channel idle,but no subscription id found on context. Unable to close subscriptions");
}
}
} else if (evt instanceof SslCompletionEvent) {
SslCompletionEvent ssl = (SslCompletionEvent) evt;
if (!ssl.isSuccess()) {
LOG.error("SSL error: {}",evt);
}
}
项目:netty-tutorials
文件:NettyConnHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent e = (IdleStateEvent) evt;
if (e.state() == IdleState.READER_IDLE) {
logger.info("READER_IDLE 事件触发,关闭连接");/*读超时*/
ctx.close();
} else if (e.state() == IdleState.WRITER_IDLE) {
logger.info("WRITER_IDLE 事件触发");
ctx.writeAndFlush(new PingMessage());
} else if (e.state() == IdleState.ALL_IDLE) {
logger.info("ALL_IDLE 事件触发,关闭连接");
ctx.close();
}
}
}
项目:rocketmq-commet
文件:NettyRemotingClient.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:rocketmq-commet
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,remoteAddress);
RemotingUtil.closeChannel(ctx.channel());
if (NettyRemotingServer.this.channelEventListener != null) {
NettyRemotingServer.this
.putNettyEvent(new NettyEvent(NettyEventType.IDLE,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:coco
文件:HeartBeatHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
super.userEventTriggered(ctx,evt);
// 拦截链路空闲事件并处理心跳
if (evt instanceof IdleStateEvent) {
// 心跳处理
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state().equals(IdleState.READER_IDLE)) {
// 未进行读操作, 服务器端主动关闭连接
LOGGER.warn("READER_IDLE,client maybe not exist,we will close the chnnel");
if (ctx.channel().isOpen()) {
ctx.close();
}
ctx.close();
} else if (event.state().equals(IdleState.WRITER_IDLE)) {
// 未进行写操作,nothing todo
// LOGGER.info("WRITER_IDLE,long time not write something to client");
} else if (event.state().equals(IdleState.ALL_IDLE)) {
// 未进行读写
// LOGGER.info("ALL_IDLE,long time not to write or read");
// 发送心跳消息
// MsgHandleService.getInstance().sendMsgUtil.sendHeartMessage(ctx);
}
}
}
项目:light-task-scheduler
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
com.lts.remoting.Channel channel = new NettyChannel(ctx);
final String remoteAddress = RemotingHelper.parseChannelRemoteAddr(channel);
if (event.state().equals(IdleState.ALL_IDLE)) {
LOGGER.warn("SERVER: IDLE [{}]",remoteAddress);
RemotingHelper.closeChannel(channel);
}
if (channelEventListener != null) {
RemotingEventType remotingEventType = RemotingEventType.valueOf(event.state().name());
putRemotingEvent(new RemotingEvent(remotingEventType,channel));
}
}
ctx.fireUserEventTriggered(evt);
}
项目:SI
文件:HttpServerHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
Channel channel = ctx.channel();
log.error("userEventTriggered={},object={}",channel,evt);
if (!(evt instanceof IdleStateEvent)) { return; }
if (evt instanceof IdleStateEvent) {
IdleStateEvent e = (IdleStateEvent) evt;
if (e.state() == IdleState.READER_IDLE) {
log.debug("userEventTriggered(readIdle)={}",ctx.channel());
if (isReadBytes == false) ctx.close();
} else if (e.state() == IdleState.WRITER_IDLE) {
log.debug("userEventTriggered(writeIdle)={}",ctx.channel());
if (isReadBytes == false) ctx.close();
} else {
log.debug("userEventTriggered(allIdle)={}",ctx.channel());
if (isReadBytes == false) ctx.close();
}
}
}
项目:rocketmq
文件:NettyRemotingClient.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:rocketmq
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state().equals(IdleState.ALL_IDLE)) {
final String remoteAddress = RemotingHelper.parseChannelRemoteAddr(ctx.channel());
log.warn("NETTY SERVER PIPELINE: IDLE exception [{}]",ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:Thor
文件:NettyServerHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.READER_IDLE) {
// logger.info("read idle");
} else if (event.state() == IdleState.WRITER_IDLE) {
// logger.info("write idle");
} else if (event.state() == IdleState.ALL_IDLE) {
JSyncPacket message = new JSyncPacket();
message.setPacketType(2);
ctx.channel().writeAndFlush(message);
logger.info("[Server 链路空闲!发送心跳!]" + message);
}
}
}
项目:rocketmq-all-trans
文件:NettyRemotingClient.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:rocketmq-all-trans
文件:NettyRemotingServer.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,remoteAddress);
RemotingUtil.closeChannel(ctx.channel());
if (NettyRemotingServer.this.channelEventListener != null) {
NettyRemotingServer.this.putNettyEvent(new NettyEvent(NettyEventType.IDLE,ctx.channel()));
}
}
}
ctx.fireUserEventTriggered(evt);
}
项目:carbon-transports
文件:RedirectHandler.java
/**
* When a timeout occurs,notify listener and close the channel.
*
* @param ctx Channel context
* @param evt Event
* @throws Exception
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.READER_IDLE || event.state() == IdleState.WRITER_IDLE) {
if (originalChannelContext == null) {
originalChannelContext = ctx;
}
if (ctx == originalChannelContext) {
originalChannelContext.fireUserEventTriggered(evt);
isIdleHandlerOfTargetChannelRemoved = true;
} else {
sendTimeoutError(ctx);
}
/*Once a timeout occurs after sending the response,close the channel,otherwise we will still be
getting response data after the timeout,if backend sends data. */
if (ctx != originalChannelContext) {
ctx.close();
}
}
}
}
项目:message-center
文件:HeartbeatHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent e = (IdleStateEvent) evt;
if (e.state() == IdleState.WRITER_IDLE) {
if(ctx.hasAttr(ServerConstant.SUSPECT) && ctx.attr(ServerConstant.SUSPECT).get()){
LOGGER.info("suspect {} write idle happened again and close",ctx);
ctx.close();
}else{
LOGGER.info("{} write idle happened and set context suspect true",ctx);
ctx.attr(ServerConstant.SUSPECT).set(true);
ctx.writeAndFlush(Unpooled.wrappedBuffer(MessageFactory.createHeartbeat().toBinary())).addListener(future -> {
if (!future.isSuccess()) {
LOGGER.info("failed to send heartbeat to {} message,cause by {} ",ctx.channel().remoteAddress(),future.cause());
}
});
}
}
}
}
项目:umbrella
文件:DefaultServerHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent e = (IdleStateEvent) evt;
if (e.state() == IdleState.READER_IDLE) {
LOGGER.info("READER_IDLE");
// ctx.close(); // 断开客户端的连接
} else if (e.state() == IdleState.WRITER_IDLE) {
LOGGER.info("WRITER_IDLE");
} else if (e.state() == IdleState.ALL_IDLE) {
LOGGER.info("ALL_IDLE");
// ctx.close(); // 断开客户端的连接
}
}
super.userEventTriggered(ctx,evt);
}
项目:van
文件:NettyAcceptedManager.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt)
throws Exception {
if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state().equals(IdleState.READER_IDLE)) {
System.out.println("READER_IDLE");
// 超时关闭channel
ctx.close();
} else if (event.state().equals(IdleState.WRITER_IDLE)) {
System.out.println("WRITER_IDLE");
} else if (event.state().equals(IdleState.ALL_IDLE)) {
System.out.println("ALL_IDLE");
// 发送心跳
ctx.channel().writeAndFlush("ping;");
}
}
super.userEventTriggered(ctx,evt);
}
项目:tajo
文件:MonitorClientHandler.java
@Override
public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
if (enableMonitor && evt instanceof IdleStateEvent) {
IdleStateEvent e = (IdleStateEvent) evt;
if (e.state() == IdleState.READER_IDLE && !e.isFirst()) {
/* trigger expired event */
LOG.info("Server has not respond " + ctx.channel());
ctx.fireUserEventTriggered(MonitorStateEvent.MONITOR_EXPIRED_STATE_EVENT);
} else if (e.state() == IdleState.WRITER_IDLE) {
/* send ping packet to remote server */
if(LOG.isDebugEnabled()){
LOG.debug("sending ping request " + ctx.channel());
}
ctx.writeAndFlush(ping.duplicate().retain());
}
}
super.userEventTriggered(ctx,evt);
}