package GameServer; import GameServer.codec.RS2CodecFactory; import GameServer.net.PacketQueue; import GameServer.packet.Packet; import org.apache.mina.common.IdleStatus; import org.apache.mina.common.IoHandler; import org.apache.mina.common.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; /** * Handles the protocol events fired from MINA. */ public class ConnectionHandler implements IoHandler { private GameEngine engine; private PacketQueue packets; public ConnectionHandler(GameEngine engine) { this.engine = engine; packets = engine.getPacketQueue(); } public void exceptionCaught(IoSession session, Throwable cause) { System.out.println(cause); session.close(); } public void messageReceived(IoSession session, Object message) { Packet p = (Packet) message; packets.add(p); } public void messageSent(IoSession session, Object message) { } public void sessionClosed(IoSession session) { System.out.println("Session Closed "+session.getRemoteAddress()); } public void sessionCreated(IoSession session) { session.getFilterChain().addFirst("protocolFilter", new ProtocolCodecFilter(new RS2CodecFactory())); System.out.println("Session Created "+session.getRemoteAddress()); } public void sessionIdle(IoSession session, IdleStatus status) { System.out.println("Session Idle now closing"+session.getRemoteAddress()); session.close(); } public void sessionOpened(IoSession session) { System.out.println("Session Opened "+session.getRemoteAddress()); session.setIdleTime(IdleStatus.BOTH_IDLE, 60); } }