Example #1
0
  /**
   * 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;
  }