public interface MessageReader<H extends MessageHeader,M extends Message>
Modifier and Type | Method and Description |
---|---|
default byte |
getMessageSequence()
Get last message sequence number, as it was stored by
readHeader() . |
default H |
probeHeader()
Read the next message header from server, possibly blocking indefinitely until the message is received,
and cache it so that the next
readHeader() return the same header. |
default M |
probeMessage(java.util.Optional<M> reuse,
H header)
Read message from server into to the given
Message instance or into the new one if not present
and cache it so that the next readMessage(Optional, MessageHeader) return the same message. |
default void |
pushMessageListener(MessageListener<M> l)
Queue a
MessageListener to receive messages delivered asynchronously. |
H |
readHeader()
Read the next message header from server, possibly blocking indefinitely until the message is received.
|
M |
readMessage(java.util.Optional<M> reuse,
H header)
Read message from server into to the given
Message instance or into the new one if not present. |
default M |
readMessage(java.util.Optional<M> reuse,
int expectedType)
Read message from server into to the given
Message instance or into the new one if not present. |
default void |
resetMessageSequence()
Set stored message sequence number to 0.
|
default void |
start()
Start reading messages reader from the provided channel.
|
default void |
stopAfterNextMessage()
Signal to the reader that it should stop reading messages after reading the next message.
|
default MessageReader<H,M> |
undecorate()
Return the previous MessageReader instance from the decorators chain or the current MessageReader
if it is the first entry in a chain.
|
default MessageReader<H,M> |
undecorateAll()
Return a MessageReader instance free of decorators.
|
H readHeader() throws java.io.IOException
MessageHeader
of the next messagejava.io.IOException
- if an error occursdefault H probeHeader() throws java.io.IOException
readHeader()
return the same header.MessageHeader
of the next messagejava.io.IOException
- if an error occursM readMessage(java.util.Optional<M> reuse, H header) throws java.io.IOException
Message
instance or into the new one if not present.
For asynchronous channel it synchronously reads the next message in the stream, blocking until the message is read fully.
Could throw CJCommunicationsException wrapping an IOException
during read or parsereuse
- Message
object to reuse. May be ignored by implementation.header
- MessageHeader
instanceMessage
instancejava.io.IOException
- if an error occursdefault M probeMessage(java.util.Optional<M> reuse, H header) throws java.io.IOException
Message
instance or into the new one if not present
and cache it so that the next readMessage(Optional, MessageHeader)
return the same message.
For asynchronous channel it synchronously reads the next message in the stream, blocking until the message is read fully.
Could throw CJCommunicationsException wrapping an IOException
during read or parsereuse
- Message
object to reuse. May be ignored by implementation.header
- MessageHeader
instanceMessage
instancejava.io.IOException
- if an error occursdefault M readMessage(java.util.Optional<M> reuse, int expectedType) throws java.io.IOException
Message
instance or into the new one if not present.
For asynchronous channel it synchronously reads the next message in the stream, blocking until the message is read fully.
Could throw WrongArgumentException if the expected message type is not the next message (exception will be thrown in *caller* context).default void pushMessageListener(MessageListener<M> l)
MessageListener
to receive messages delivered asynchronously.l
- MessageListener
default byte getMessageSequence()
readHeader()
.default void resetMessageSequence()
default MessageReader<H,M> undecorateAll()
MessageReader
default MessageReader<H,M> undecorate()
MessageReader
default void start()
default void stopAfterNextMessage()