Interface MessageParser

  • All Known Implementing Classes:
    MessageParserImpl

    public interface MessageParser
    An interface that knows how to parse bytes into a protocol data unit.
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      void checkTimeout​(long timeSinceLastInput)
      Checks for a stalled or rogue client.
      MessageMediator getMessageMediator()
      Returns the full message constructed by the last call to offerBuffer(ByteBuffer).
      java.nio.ByteBuffer getMsgByteBuffer()
      Returns the byte buffer (if any) associated with the last message returned.
      java.nio.ByteBuffer getNewBufferAndCopyOld​(java.nio.ByteBuffer byteBuffer)  
      int getNextMessageStartPosition()
      Get the starting position where the next message in the ByteBuffer given to parseBytes() begins.
      java.nio.ByteBuffer getRemainderBuffer()
      Returns a buffer containing whatever is left after processing the buffer provided in offerBuffer(ByteBuffer), which could be the same buffer.
      int getSizeNeeded()
      Return the suggested number of bytes needed to hold the next message to be parsed.
      boolean hasMoreBytesToParse()
      Are there more bytes to be parsed in the ByteBuffer given to this MessageParser's parseBytes ? This method is typically called after a call to parseBytes() to determine if the ByteBuffer has more bytes which need to parsed into a Message.
      boolean isExpectingFragments()  
      boolean isExpectingMoreData()
      Is this MessageParser expecting more data ? This method is typically called after a call to parseBytes() to determine if the ByteBuffer which has been parsed contains a partial Message.
      void offerBuffer​(java.nio.ByteBuffer buffer)
      Offers an input buffer to the parser.
      Message parseBytes​(java.nio.ByteBuffer byteBuffer, Connection connection)
      If there are sufficient bytes in the ByteBuffer to compose a Message, then return a newly initialized Message.
      void setNextMessageStartPosition​(int position)
      Set the starting position where the next message in the ByteBuffer given to parseBytes() begins.
    • Method Detail

      • getNewBufferAndCopyOld

        java.nio.ByteBuffer getNewBufferAndCopyOld​(java.nio.ByteBuffer byteBuffer)
      • isExpectingMoreData

        boolean isExpectingMoreData()
        Is this MessageParser expecting more data ? This method is typically called after a call to parseBytes() to determine if the ByteBuffer which has been parsed contains a partial Message.
        Returns:
        - true if more bytes are needed to construct a Message. false, if no additional bytes remain to be parsed into a Message.
      • parseBytes

        Message parseBytes​(java.nio.ByteBuffer byteBuffer,
                           Connection connection)
        If there are sufficient bytes in the ByteBuffer to compose a Message, then return a newly initialized Message. Otherwise, return null. When this method is first called, it is assumed that ByteBuffer.position() points to the location in the ByteBuffer where the beginning of the first Message begins. If there is no partial Message remaining in the ByteBuffer when this method exits, this method will e this.expectingMoreData to false. Otherwise, it will be set to true. Callees of this method may check isExpectingMoreData() subsequently to determine if this MessageParser is expecting more data to complete a protocol data unit. Callees may also subsequently check hasMoreBytesToParse() to determine if this MessageParser has more data to parse in the given ByteBuffer.
        Parameters:
        byteBuffer - Buffer to parse
        connection - connection for message
        Returns:
        Message if one is found in the ByteBuffer. Otherwise, returns null.
      • hasMoreBytesToParse

        boolean hasMoreBytesToParse()
        Are there more bytes to be parsed in the ByteBuffer given to this MessageParser's parseBytes ? This method is typically called after a call to parseBytes() to determine if the ByteBuffer has more bytes which need to parsed into a Message.
        Returns:
        true if there are more bytes to be parsed. Otherwise false.
      • setNextMessageStartPosition

        void setNextMessageStartPosition​(int position)
        Set the starting position where the next message in the ByteBuffer given to parseBytes() begins.
        Parameters:
        position - the next starting position
      • getNextMessageStartPosition

        int getNextMessageStartPosition()
        Get the starting position where the next message in the ByteBuffer given to parseBytes() begins.
        Returns:
        start position in the buffer of the next message
      • getSizeNeeded

        int getSizeNeeded()
        Return the suggested number of bytes needed to hold the next message to be parsed.
        Returns:
        bytes needed to hold message
      • getMsgByteBuffer

        java.nio.ByteBuffer getMsgByteBuffer()
        Returns the byte buffer (if any) associated with the last message returned.
        Returns:
        the associated byte buffer
      • offerBuffer

        void offerBuffer​(java.nio.ByteBuffer buffer)
        Offers an input buffer to the parser. Position must be set to 0, and the buffer must contain at least the start of a GIOP message. The parser will consume what it can and make the remainder available in getRemainderBuffer()
        Parameters:
        buffer - a buffer containing at least the start of a GIOP message.
      • getRemainderBuffer

        java.nio.ByteBuffer getRemainderBuffer()
        Returns a buffer containing whatever is left after processing the buffer provided in offerBuffer(ByteBuffer), which could be the same buffer. The buffer could also be null if all data has been consumed.
        Returns:
        a byte buffer representing data which still needs to be processed.
      • getMessageMediator

        MessageMediator getMessageMediator()
        Returns the full message constructed by the last call to offerBuffer(ByteBuffer). Will be null if the last such call did not complete a message.
        Returns:
        a complete message, wrapped in a message mediator.
      • checkTimeout

        void checkTimeout​(long timeSinceLastInput)
        Checks for a stalled or rogue client. If in the middle of receiving a message and the time exceeds the limit, will throw a communications failure exception.
        Parameters:
        timeSinceLastInput - the number of milliseconds since the last input was received.
      • isExpectingFragments

        boolean isExpectingFragments()