public abstract class CumulativeProtocolDecoder extends java.lang.Object implements ProtocolDecoder
ProtocolDecoder
that cumulates the content of received
buffers to a cumulative buffer to help users implement decoders.
If the received ByteBuffer
is only a part of a message.
decoders should cumulate received buffers to make a message complete or
to postpone decoding until more buffers arrive.
Here is an example decoder that decodes a list of integers:
public class IntegerDecoder extends CumulativeProtocolDecoder { public IntegerDecoder() { super(4); } protected boolean doDecode(ProtocolSession session, ByteBuffer in, ProtocolDecoderOutput out) throws ProtocolViolationException { if (in.remaining() < 4) { return false; // Cumulate remainder to decode later. } out.write(new Integer(in.getInt())); // Decoded one integer; CumulativeProtocolDecoder will call me again, // so I can decode as many integers as possible. return true; } }
Modifier | Constructor and Description |
---|---|
protected |
CumulativeProtocolDecoder(int defaultCapacity)
Creates a new instance with the specified default capacity of
cumulative buffer.
|
Modifier and Type | Method and Description |
---|---|
void |
decode(ProtocolSession session,
ByteBuffer in,
ProtocolDecoderOutput out)
Cumulates content of in into internal buffer and forwards
decoding request to
doDecode(ProtocolSession, ByteBuffer, ProtocolDecoderOutput) . |
protected abstract boolean |
doDecode(ProtocolSession session,
ByteBuffer in,
ProtocolDecoderOutput out)
Implement this method to consume the specified cumulative buffer and
decode its content into message(s).
|
protected CumulativeProtocolDecoder(int defaultCapacity)
public void decode(ProtocolSession session, ByteBuffer in, ProtocolDecoderOutput out) throws ProtocolViolationException
doDecode(ProtocolSession, ByteBuffer, ProtocolDecoderOutput)
.
doDecode() is invoked repeatedly until it returns false
and the cumulative buffer is compacted after decoding ends.decode
in interface ProtocolDecoder
java.lang.IllegalStateException
- if your doDecode() returned
true not consuming the cumulative buffer.ProtocolViolationException
- if the read data violated protocol
specificationprotected abstract boolean doDecode(ProtocolSession session, ByteBuffer in, ProtocolDecoderOutput out) throws ProtocolViolationException
in
- the cumulative bufferProtocolViolationException
- if cannot decode in.