publicfinalclassReadCompletionHandlerimplementsCompletionHandler{privatestaticfinalLogger log=LoggerFactory
.getLogger(ReadCompletionHandler.class);protectedfinalAioTCPController controller;publicReadCompletionHandler(AioTCPController controller) {this.controller=controller;
}
@Overridepublicvoidcancelled(AbstractAioSession session) {
log.warn("Session("+session.getRemoteSocketAddress()+") read operation was canceled");
}
@Overridepublicvoidcompleted(Integer result, AbstractAioSession session) {if(log.isDebugEnabled())
log.debug("Session("+session.getRemoteSocketAddress()+") read +"+result+"bytes");if(result<0) {
session.close();return;
}try{if(result>0) {
session.updateTimeStamp();
session.getReadBuffer().flip();
session.decode();
session.getReadBuffer().compact();
}
}finally{try{
session.pendingRead();
}catch(IOException e) {
session.onException(e);
session.close();
}
}
controller.checkSessionTimeout();
}
@Overridepublicvoidfailed(Throwable exc, AbstractAioSession session) {
log.error("Session read error", exc);
session.onException(exc);
session.close();
}
}