/** * Method parseClientPacket. * * @param handler IPacketHandler<T> * @param buf ByteBuffer * @param dataSize int * @param con MMOConnection<T> * @return boolean */ protected boolean parseClientPacket( IPacketHandler<T> handler, ByteBuffer buf, int dataSize, MMOConnection<T> con) { T client = con.getClient(); int pos = buf.position(); client.decrypt(buf, dataSize); buf.position(pos); if (buf.hasRemaining()) { // apply limit int limit = buf.limit(); buf.limit(pos + dataSize); ReceivablePacket<T> rp = handler.handlePacket(buf, client); if (rp != null) { rp.setByteBuffer(buf); rp.setClient(client); if (rp.read()) { con.recvPacket(rp); } rp.setByteBuffer(null); } buf.limit(limit); } return true; }