Class DecodingStateMachine
- java.lang.Object
-
- org.apache.mina.filter.codec.statemachine.DecodingStateMachine
-
- All Implemented Interfaces:
DecodingState
public abstract class DecodingStateMachine extends Object implements DecodingState
Abstract base class for decoder state machines. Calls init() to get the startDecodingState
of the state machine. Calls destroy() when the state machine has reached its end state or when the session is closed.NOTE: The
ProtocolDecoderOutput
used by this class when callingDecodingState.decode(IoBuffer, ProtocolDecoderOutput)
buffers decoded messages in aList
. Once the state machine has reached its end state this class will call finishDecode(List, ProtocolDecoderOutput). The implementation will have to take care of writing the decoded messages to the realProtocolDecoderOutput
used by the configuredProtocolCodecFilter
.- Author:
- Apache MINA Project
-
-
Constructor Summary
Constructors Constructor Description DecodingStateMachine()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description DecodingState
decode(IoBuffer in, ProtocolDecoderOutput out)
Invoked when data is available for this state.protected abstract void
destroy()
Invoked to destroy this state machine once the end state has been reached or the session has been closed.protected abstract DecodingState
finishDecode(List<Object> childProducts, ProtocolDecoderOutput out)
Called once the state machine has reached its end.DecodingState
finishDecode(ProtocolDecoderOutput out)
Invoked when the associatedIoSession
is closed.protected abstract DecodingState
init()
Invoked to initialize this state machine.
-
-
-
Method Detail
-
init
protected abstract DecodingState init() throws Exception
Invoked to initialize this state machine.- Returns:
- the start
DecodingState
. - Throws:
Exception
- if the initialization failed
-
finishDecode
protected abstract DecodingState finishDecode(List<Object> childProducts, ProtocolDecoderOutput out) throws Exception
Called once the state machine has reached its end.- Parameters:
childProducts
- contains the messages generated by each of theDecodingState
s which were exposed to the received data during the life time of this state machine.out
- the realProtocolDecoderOutput
used by theProtocolCodecFilter
.- Returns:
- the next state if the state machine should resume.
- Throws:
Exception
- if the decoding end failed
-
destroy
protected abstract void destroy() throws Exception
Invoked to destroy this state machine once the end state has been reached or the session has been closed.- Throws:
Exception
- if the destruction failed
-
decode
public DecodingState decode(IoBuffer in, ProtocolDecoderOutput out) throws Exception
Invoked when data is available for this state.- Specified by:
decode
in interfaceDecodingState
- Parameters:
in
- the data to be decoded.out
- used to write decoded objects.- Returns:
- the next state if a state transition was triggered (use
this
for loop transitions) ornull
if the state machine has reached its end. - Throws:
Exception
- if the read data violated protocol specification.
-
finishDecode
public DecodingState finishDecode(ProtocolDecoderOutput out) throws Exception
Invoked when the associatedIoSession
is closed. This method is useful when you deal with protocols which don't specify the length of a message (e.g. HTTP responses withoutcontent-length
header). Implement this method to process the remaining data thatDecodingState.decode(IoBuffer, ProtocolDecoderOutput)
method didn't process completely.- Specified by:
finishDecode
in interfaceDecodingState
- Parameters:
out
- used to write decoded objects.- Returns:
- the next state if a state transition was triggered (use
this
for loop transitions) ornull
if the state machine has reached its end. - Throws:
Exception
- if the read data violated protocol specification.
-
-