package org.drools.grid.remote.mina; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; import org.drools.SystemEventListener; import org.drools.grid.internal.ClientGenericMessageReceiver; import org.drools.grid.internal.GenericMessageHandler; import org.drools.grid.internal.Message; import org.drools.grid.internal.MessageResponseHandler; public class MinaIoHandler extends IoHandlerAdapter { /** * Listener used for logging */ private final SystemEventListener systemEventListener; private ClientGenericMessageReceiver clientMessageReceiver; public MinaIoHandler(SystemEventListener systemEventListener) { this( systemEventListener, null ); } public MinaIoHandler(SystemEventListener systemEventListener, GenericMessageHandler handler) { this.systemEventListener = systemEventListener; this.clientMessageReceiver = new ClientGenericMessageReceiverImpl( handler, systemEventListener ); } public void addResponseHandler(int id, MessageResponseHandler responseHandler) { this.clientMessageReceiver.addResponseHandler( id, responseHandler ); } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { this.systemEventListener.exception( "Uncaught exception on Server", cause ); } @Override public void messageReceived(IoSession session, Object object) throws Exception { Message msg = (Message) object; this.clientMessageReceiver.messageReceived( new MinaIoWriter( session ), msg ); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { this.systemEventListener.debug( "Server IDLE " + session.getIdleCount( status ) ); } }