Class BroadcastReceiver


  • public class BroadcastReceiver
    extends java.lang.Object
    Receive messages broadcast from a BroadcastTransmitter via an underlying buffer. Receivers can join a transmission stream at any point by consuming the latest message at the point of joining and forward.

    If a Receiver cannot keep up with the transmission stream then loss will be experienced. Loss is not an error condition.

    Note: Each Receiver is not threadsafe but there can be zero or many receivers to a transmission stream.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      MutableDirectBuffer buffer()
      The underlying buffer containing the broadcast message stream.
      int capacity()
      Get the capacity of the underlying broadcast buffer.
      long lappedCount()
      Get the number of times the transmitter has lapped this receiver around the buffer.
      int length()
      The length of the next message in the transmission stream.
      int offset()
      The offset for the beginning of the next message in the transmission stream.
      boolean receiveNext()
      Non-blocking receive of next message from the transmission stream.
      int typeId()
      Type of the message received.
      boolean validate()
      Validate that the current received record is still valid and has not been overwritten.
      private boolean validate​(long cursor, AtomicBuffer buffer, int capacity)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • cursor

        private long cursor
      • nextRecord

        private long nextRecord
      • recordOffset

        private int recordOffset
      • capacity

        private final int capacity
      • tailIntentCounterIndex

        private final int tailIntentCounterIndex
      • tailCounterIndex

        private final int tailCounterIndex
      • latestCounterIndex

        private final int latestCounterIndex
      • lappedCount

        private final java.util.concurrent.atomic.AtomicLong lappedCount
    • Method Detail

      • capacity

        public int capacity()
        Get the capacity of the underlying broadcast buffer.
        Returns:
        the capacity of the underlying broadcast buffer.
      • lappedCount

        public long lappedCount()
        Get the number of times the transmitter has lapped this receiver around the buffer. On each lap as least a buffer's worth of loss will be experienced.

        Note: This method is threadsafe for calling from an external monitoring thread.

        Returns:
        the capacity of the underlying broadcast buffer.
      • typeId

        public int typeId()
        Type of the message received.
        Returns:
        typeId of the message received.
      • offset

        public int offset()
        The offset for the beginning of the next message in the transmission stream.
        Returns:
        offset for the beginning of the next message in the transmission stream.
      • length

        public int length()
        The length of the next message in the transmission stream.
        Returns:
        length of the next message in the transmission stream.
      • buffer

        public MutableDirectBuffer buffer()
        The underlying buffer containing the broadcast message stream.
        Returns:
        the underlying buffer containing the broadcast message stream.
      • receiveNext

        public boolean receiveNext()
        Non-blocking receive of next message from the transmission stream.

        If loss has occurred then lappedCount() will be incremented.

        Returns:
        true if transmission is available with offset(), length() and typeId() set for the next message to be consumed. If no transmission is available then false.
      • validate

        public boolean validate()
        Validate that the current received record is still valid and has not been overwritten.

        If the receiver is not consuming messages fast enough to keep up with the transmitter then loss can be experienced resulting in messages being overwritten thus making them no longer valid.

        Returns:
        true if still valid otherwise false.
      • validate

        private boolean validate​(long cursor,
                                 AtomicBuffer buffer,
                                 int capacity)