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; }
private static int putMimeType( final MutableDirectBuffer mutableDirectBuffer, final int fieldOffset, final String mimeType) { byte[] bytes = mimeType.getBytes(StandardCharsets.UTF_8); mutableDirectBuffer.putByte(fieldOffset, (byte) bytes.length); mutableDirectBuffer.putBytes(fieldOffset + 1, bytes); return 1 + bytes.length; }
private long encodeApplicationMessageWithFrame(ByteBuffer buffer, byte[] message) { int offset = 0; mutableBuffer.wrap(buffer); frameEncoder.wrap(buffer, offset).encodeFrameHeader(); offset += frameEncoder.getHeaderLength(); messageHeaderEncoder.wrap(mutableBuffer, offset); messageHeaderEncoder .blockLength(message.length) .templateId(templateId) .schemaId(schemaId) .version(schemaVersion); offset += MessageHeaderEncoder.ENCODED_LENGTH; buffer.position(offset); buffer.put(message, 0, message.length); frameEncoder.setMessageLength(message.length + MessageHeaderEncoder.ENCODED_LENGTH); frameEncoder.encodeFrameTrailer(); return frameEncoder.getEncodedLength(); }
public void wrap(final MutableDirectBuffer buffer, final int offset) { super.wrap(buffer, offset); buffer.putInt(offset, type().ordinal()); }