package com.ee.ctp.ftdc; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ee.ctp.ApplicationRuntime; import com.ee.ctp.dto.HeartBeat; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleStateEvent; /** * * @author ee * 2017年10月17日 下午8:27:13 * */ public class FtdHeartbeatHandler extends ChannelInboundHandlerAdapter{ private static final Logger logger = LoggerFactory.getLogger(FtdHeartbeatHandler.class); @Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { if(evt instanceof IdleStateEvent) { IdleStateEvent event = (IdleStateEvent) evt; if(event.state() == IdleState.READER_IDLE) { //超过约定时间没有收到数据认为链路有问题 logger.warn("not recieve heartbeat , exceed {}", ApplicationRuntime.conf().getFtdcReaderIdle()); ctx.close(); }else if(event.state() == IdleState.WRITER_IDLE) { //超过约定时间没有写数据发心跳保活 ctx.writeAndFlush(HeartBeat.getHeartBeat()); } } } }