/**
   * Method writePacket.
   *
   * @param key SelectionKey
   */
  protected void writePacket(SelectionKey key) {
    MMOConnection<T> con = (MMOConnection<T>) key.attachment();

    prepareWriteBuffer(con);

    DIRECT_WRITE_BUFFER.flip();
    int size = DIRECT_WRITE_BUFFER.remaining();

    int result = -1;

    try {
      result = con.getWritableChannel().write(DIRECT_WRITE_BUFFER);
    } catch (IOException e) {
      // error handling goes on the if bellow
    }

    // check if no error happened
    if (result >= 0) {
      stats.increaseOutgoingBytes(result);

      // check if we written everything
      if (result != size) {
        con.createWriteBuffer(DIRECT_WRITE_BUFFER);
      }

      if (!con.getSendQueue().isEmpty() || con.hasPendingWriteBuffer()) {
        con.scheduleWriteInterest();
      }
    } else {
      con.onForcedDisconnection();
      closeConnectionImpl(con);
    }
  }