package chat.server.moquette; import org.apache.log4j.Logger; import chat.server.moquette.message.ClientID; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleStateEvent; public class MqttIdleTimeoutHandler extends ChannelDuplexHandler { private static Logger logger; static { logger = Logger.getLogger(MqttIdleTimeoutHandler.class); } @Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { if (evt instanceof IdleStateEvent) { IdleState e = ((IdleStateEvent) evt).state(); if (e == IdleState.READER_IDLE) { ClientID clientId = ClientID.valueOf(ctx.channel()); logger.info("Firing channel inactive event. MqttClientId = " + clientId); ctx.fireChannelInactive(); ctx.close(); } } else { if (logger.isDebugEnabled()) { ClientID clientId = ClientID.valueOf(ctx.channel()); logger.debug("Firing Netty event. MqttClientId = " + clientId + ", eventClass = " + evt.getClass().getName()); } super.userEventTriggered(ctx, evt); } } }