Class DecodingStateMachine
- java.lang.Object
-
- org.apache.mina.filter.codec.statemachine.DecodingStateMachine
-
- All Implemented Interfaces:
DecodingState
public abstract class DecodingStateMachine extends java.lang.Object implements DecodingState
Abstract base class for decoder state machines. Calls init() to get the startDecodingStateof the state machine. Calls destroy() when the state machine has reached its end state or when the session is closed.NOTE: The
ProtocolDecoderOutputused 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 realProtocolDecoderOutputused by the configuredProtocolCodecFilter.
-
-
Field Summary
Fields Modifier and Type Field Description private ProtocolDecoderOutputchildOutputprivate java.util.List<java.lang.Object>childProductsprivate DecodingStatecurrentStateprivate booleaninitializedprivate static org.slf4j.LoggerLOGGER
-
Constructor Summary
Constructors Constructor Description DecodingStateMachine()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description private voidcleanup()DecodingStatedecode(IoBuffer in, ProtocolDecoderOutput out)Invoked when data is available for this state.protected abstract voiddestroy()Invoked to destroy this state machine once the end state has been reached or the session has been closed.protected abstract DecodingStatefinishDecode(java.util.List<java.lang.Object> childProducts, ProtocolDecoderOutput out)Called once the state machine has reached its end.DecodingStatefinishDecode(ProtocolDecoderOutput out)Invoked when the associatedIoSessionis closed.private DecodingStategetCurrentState()protected abstract DecodingStateinit()Invoked to initialize this state machine.
-
-
-
Field Detail
-
LOGGER
private static final org.slf4j.Logger LOGGER
-
childProducts
private final java.util.List<java.lang.Object> childProducts
-
childOutput
private final ProtocolDecoderOutput childOutput
-
currentState
private DecodingState currentState
-
initialized
private boolean initialized
-
-
Method Detail
-
init
protected abstract DecodingState init() throws java.lang.Exception
Invoked to initialize this state machine.- Returns:
- the start
DecodingState. - Throws:
java.lang.Exception- if the initialization failed
-
finishDecode
protected abstract DecodingState finishDecode(java.util.List<java.lang.Object> childProducts, ProtocolDecoderOutput out) throws java.lang.Exception
Called once the state machine has reached its end.- Parameters:
childProducts- contains the messages generated by each of theDecodingStates which were exposed to the received data during the life time of this state machine.out- the realProtocolDecoderOutputused by theProtocolCodecFilter.- Returns:
- the next state if the state machine should resume.
- Throws:
java.lang.Exception- if the decoding end failed
-
destroy
protected abstract void destroy() throws java.lang.ExceptionInvoked to destroy this state machine once the end state has been reached or the session has been closed.- Throws:
java.lang.Exception- if the destruction failed
-
decode
public DecodingState decode(IoBuffer in, ProtocolDecoderOutput out) throws java.lang.Exception
Invoked when data is available for this state.- Specified by:
decodein 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
thisfor loop transitions) ornullif the state machine has reached its end. - Throws:
java.lang.Exception- if the read data violated protocol specification.
-
finishDecode
public DecodingState finishDecode(ProtocolDecoderOutput out) throws java.lang.Exception
Invoked when the associatedIoSessionis closed. This method is useful when you deal with protocols which don't specify the length of a message (e.g. HTTP responses withoutcontent-lengthheader). Implement this method to process the remaining data thatDecodingState.decode(IoBuffer, ProtocolDecoderOutput)method didn't process completely.- Specified by:
finishDecodein interfaceDecodingState- Parameters:
out- used to write decoded objects.- Returns:
- the next state if a state transition was triggered (use
thisfor loop transitions) ornullif the state machine has reached its end. - Throws:
java.lang.Exception- if the read data violated protocol specification.
-
cleanup
private void cleanup()
-
getCurrentState
private DecodingState getCurrentState() throws java.lang.Exception
- Throws:
java.lang.Exception
-
-