public static void FillMetaData(UnsafeBuffer cncMetaDataBuffer, int toDriverBufferLength, int toClientsBufferLength, int counterMetaDataBufferLength, int counterValuesBufferLength, long clientLivenessTimeout, int errorLogBufferLength) { cncMetaDataBuffer.PutInt(CncVersionOffset(0), CNC_VERSION); cncMetaDataBuffer.PutInt(ToDriverBufferLengthOffset(0), toDriverBufferLength); cncMetaDataBuffer.PutInt(ToClientsBufferLengthOffset(0), toClientsBufferLength); cncMetaDataBuffer.PutInt(CountersMetaDataBufferLengthOffset(0), counterMetaDataBufferLength); cncMetaDataBuffer.PutInt(CountersValuesBufferLengthOffset(0), counterValuesBufferLength); cncMetaDataBuffer.PutLong(ClientLivenessTimeoutOffset(0), clientLivenessTimeout); cncMetaDataBuffer.PutInt(ErrorLogBufferLengthOffset(0), errorLogBufferLength); }
/// <summary> /// Return an initialised default Data Frame Header. /// </summary> /// <param name="sessionId"> for the header </param> /// <param name="streamId"> for the header </param> /// <param name="termId"> for the header </param> /// <returns> byte array containing the header </returns> public static UnsafeBuffer CreateDefaultHeader(int sessionId, int streamId, int termId) { var buffer = new UnsafeBuffer(new byte[HEADER_LENGTH]); buffer.PutByte(VERSION_FIELD_OFFSET, CURRENT_VERSION); buffer.PutByte(FLAGS_FIELD_OFFSET, (byte)BEGIN_AND_END_FLAGS); buffer.PutShort(TYPE_FIELD_OFFSET, HDR_TYPE_DATA); buffer.PutInt(SESSION_ID_FIELD_OFFSET, sessionId); buffer.PutInt(STREAM_ID_FIELD_OFFSET, streamId); buffer.PutInt(TERM_ID_FIELD_OFFSET, termId); buffer.PutLong(RESERVED_VALUE_OFFSET, DEFAULT_RESERVE_VALUE); return buffer; }
/// <summary> /// Store the default frame header to the log meta data buffer. /// </summary> /// <param name="logMetaDataBuffer"> into which the default headers should be stored. </param> /// <param name="defaultHeader"> to be stored. </param> /// <exception cref="ArgumentException"> if the default header is larger than <seealso cref="LOG_DEFAULT_FRAME_HEADER_MAX_LENGTH"/> </exception> public static void StoreDefaultFrameHeader(UnsafeBuffer logMetaDataBuffer, IDirectBuffer defaultHeader) { if (defaultHeader.Capacity != DataHeaderFlyweight.HEADER_LENGTH) { throw new ArgumentException( $"Default header of {defaultHeader.Capacity:D} not equal to {DataHeaderFlyweight.HEADER_LENGTH:D}"); } logMetaDataBuffer.PutInt(LOG_DEFAULT_FRAME_HEADER_LENGTH_OFFSET, DataHeaderFlyweight.HEADER_LENGTH); logMetaDataBuffer.PutBytes(LOG_DEFAULT_FRAME_HEADER_OFFSET, defaultHeader, 0, DataHeaderFlyweight.HEADER_LENGTH); }
/// <summary> /// Set the MTU length used for this log. /// </summary> /// <param name="logMetaDataBuffer"> containing the meta data. </param> /// <param name="mtuLength"> value to be set. </param> public static void MtuLength(UnsafeBuffer logMetaDataBuffer, int mtuLength) { logMetaDataBuffer.PutInt(LOG_MTU_LENGTH_OFFSET, mtuLength); }
/// <summary> /// Set the initial term at which this log begins. Initial should be randomised so that stream does not get /// reused accidentally. /// </summary> /// <param name="logMetaDataBuffer"> containing the meta data. </param> /// <param name="initialTermId"> value to be set. </param> public static void InitialTermId(UnsafeBuffer logMetaDataBuffer, int initialTermId) { logMetaDataBuffer.PutInt(LOG_INITIAL_TERM_ID_OFFSET, initialTermId); }
/// <summary> /// Write the term id field for a frame. /// </summary> /// <param name="buffer"> containing the frame. </param> /// <param name="termOffset"> at which a frame begins. </param> /// <param name="termId"> value for the frame. </param> public static void FrameTermId(UnsafeBuffer buffer, int termOffset, int termId) { buffer.PutInt(TermIdOffset(termOffset), termId); }