Package lcm.lcm

Class MessageAggregator

  • All Implemented Interfaces:
    LCMSubscriber

    public class MessageAggregator
    extends java.lang.Object
    implements LCMSubscriber
    Accumulates received LCM messages in a queue.

    LCM normally delivers messages asynchronously by invoking the messageReceived method on a subscriber as soon as a message is received. This class provides an alternate way to receive messages by storing them in an internal queue, and then delivering them to synchronously to the user.

    The aggregator has configurable limits. If too many messages are aggregated without having been retrieved, then older messages are discarded.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      long getMaxBufferSize()
      Retrieves the maximum amount of memory that will be used to store messages.
      int getMaxMessages()
      Retrieves the maximum number of unretrieved message that will be queued up by the aggregator.
      MessageAggregator.Message getNextMessage()
      Retrieves the next message, waiting if necessary.
      MessageAggregator.Message getNextMessage​(long timeout_ms)
      Attempt to retrieve the next received LCM message.
      void messageReceived​(LCM lcm, java.lang.String channel, lcm.lcm.LCMDataInputStream dins)
      Internal method, called by LCM when a message is received.
      int numMessagesAvailable()
      Returns the number of received messages waiting to be retrieved.
      void setMaxBufferSize​(long val)
      Sets the maximum amount of memory that will be used to store messages.
      void setMaxMessages​(int val)
      Sets the maximum number of unretrieved message that will be queued up by the aggregator.
      • Methods inherited from class java.lang.Object

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

      • MessageAggregator

        public MessageAggregator()
    • Method Detail

      • messageReceived

        public void messageReceived​(LCM lcm,
                                    java.lang.String channel,
                                    lcm.lcm.LCMDataInputStream dins)
        Internal method, called by LCM when a message is received.
        Specified by:
        messageReceived in interface LCMSubscriber
        Parameters:
        lcm - the LCM instance that received the message.
        channel - the channel on which the message was received.
        dins - the message contents.
      • setMaxBufferSize

        public void setMaxBufferSize​(long val)
        Sets the maximum amount of memory that will be used to store messages. This is an alternative way to limit the messages stored by the aggregator. Messages are discarded oldest-first to ensure that the total size of unretrieved messages stays under this limit.
        Parameters:
        val - memory limit, in bytes.
      • getMaxBufferSize

        public long getMaxBufferSize()
        Retrieves the maximum amount of memory that will be used to store messages.
      • setMaxMessages

        public void setMaxMessages​(int val)
        Sets the maximum number of unretrieved message that will be queued up by the aggregator. Messages are discarded oldest-first to ensure that the number of unretrieved messages stays under this limit.
      • getMaxMessages

        public int getMaxMessages()
        Retrieves the maximum number of unretrieved message that will be queued up by the aggregator.
      • getNextMessage

        public MessageAggregator.Message getNextMessage​(long timeout_ms)
        Attempt to retrieve the next received LCM message.
        Parameters:
        timeout_ms - Max # of milliseconds to wait for a message. If 0, then don't wait. If less than 0, then wait indefinitely.
        Returns:
        a Message, or null if no message was received.
      • numMessagesAvailable

        public int numMessagesAvailable()
        Returns the number of received messages waiting to be retrieved.