Exemplo n.º 1
0
  public synchronized int send(short channel, FrameBody body, ByteBuffer payload) {
    if (!_closedForOutput) {
      ValueWriter<FrameBody> writer = _describedTypeRegistry.getValueWriter(body);
      int size = writer.writeToBuffer(EMPTY_BYTE_BUFFER);
      ByteBuffer payloadDup = payload == null ? null : payload.duplicate();
      int payloadSent = getMaxFrameSize() - (size + 9);
      if (payloadSent < (payload == null ? 0 : payload.remaining())) {

        if (body instanceof Transfer) {
          ((Transfer) body).setMore(Boolean.TRUE);
        }

        writer = _describedTypeRegistry.getValueWriter(body);
        size = writer.writeToBuffer(EMPTY_BYTE_BUFFER);
        payloadSent = getMaxFrameSize() - (size + 9);

        try {
          payloadDup.limit(payloadDup.position() + payloadSent);
        } catch (NullPointerException npe) {
          throw npe;
        }
      } else {
        payloadSent = payload == null ? 0 : payload.remaining();
      }
      _frameOutputHandler.send(AMQFrame.createAMQFrame(channel, body, payloadDup));
      return payloadSent;
    } else {
      return -1;
    }
  }