public static int encode(
      final MutableDirectBuffer mutableDirectBuffer,
      final int offset,
      int flags,
      final int keepaliveInterval,
      final int maxLifetime,
      final String metadataMimeType,
      final String dataMimeType,
      final ByteBuffer metadata,
      final ByteBuffer data) {
    final int frameLength =
        computeFrameLength(metadataMimeType, dataMimeType, metadata.remaining(), data.remaining());

    int length =
        FrameHeaderFlyweight.encodeFrameHeader(
            mutableDirectBuffer, offset, frameLength, flags, FrameType.SETUP, 0);

    mutableDirectBuffer.putInt(
        offset + VERSION_FIELD_OFFSET, CURRENT_VERSION, ByteOrder.BIG_ENDIAN);
    mutableDirectBuffer.putInt(
        offset + KEEPALIVE_INTERVAL_FIELD_OFFSET, keepaliveInterval, ByteOrder.BIG_ENDIAN);
    mutableDirectBuffer.putInt(
        offset + MAX_LIFETIME_FIELD_OFFSET, maxLifetime, ByteOrder.BIG_ENDIAN);

    length += BitUtil.SIZE_OF_INT * 3;

    length += putMimeType(mutableDirectBuffer, offset + length, metadataMimeType);
    length += putMimeType(mutableDirectBuffer, offset + length, dataMimeType);

    length +=
        FrameHeaderFlyweight.encodeMetadata(mutableDirectBuffer, offset, offset + length, metadata);
    length += FrameHeaderFlyweight.encodeData(mutableDirectBuffer, offset + length, data);

    return length;
  }
Пример #2
0
 public void wrap(final MutableDirectBuffer buffer, final int offset) {
   super.wrap(buffer, offset);
   buffer.putInt(offset, type().ordinal());
 }