Class DemuxingProtocolEncoder
- java.lang.Object
-
- org.apache.mina.filter.codec.demux.DemuxingProtocolEncoder
-
- All Implemented Interfaces:
ProtocolEncoder
public class DemuxingProtocolEncoder extends java.lang.Object implements ProtocolEncoder
A compositeProtocolEncoderthat demultiplexes incoming message encoding requests into an appropriateMessageEncoder.Disposing resources acquired by
MessageEncoderOverride
dispose(IoSession)method. Please don't forget to callsuper.dispose().- See Also:
MessageEncoderFactory,MessageEncoder
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classDemuxingProtocolEncoder.DefaultConstructorMessageEncoderFactory<T>private static classDemuxingProtocolEncoder.SingletonMessageEncoderFactory<T>private classDemuxingProtocolEncoder.State
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.Class<?>[]EMPTY_PARAMSprivate static AttributeKeySTATEprivate java.util.Map<java.lang.Class<?>,MessageEncoderFactory>type2encoderFactory
-
Constructor Summary
Constructors Constructor Description DemuxingProtocolEncoder()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddMessageEncoder(java.lang.Class<?> messageType, java.lang.Class<? extends MessageEncoder> encoderClass)Add a new message encoder class for a given message type<T> voidaddMessageEncoder(java.lang.Class<T> messageType, MessageEncoder<? super T> encoder)Add a new message encoder instance for a given message type<T> voidaddMessageEncoder(java.lang.Class<T> messageType, MessageEncoderFactory<? super T> factory)Add a new message encoder factory for a given message typevoidaddMessageEncoder(java.lang.Iterable<java.lang.Class<?>> messageTypes, java.lang.Class<? extends MessageEncoder> encoderClass)Add a new message encoder class for a list of message types<T> voidaddMessageEncoder(java.lang.Iterable<java.lang.Class<? extends T>> messageTypes, MessageEncoder<? super T> encoder)Add a new message instance class for a list of message types<T> voidaddMessageEncoder(java.lang.Iterable<java.lang.Class<? extends T>> messageTypes, MessageEncoderFactory<? super T> factory)Add a new message encoder factory for a list of message typesvoiddispose(IoSession session)Releases all resources related with this encoder.voidencode(IoSession session, java.lang.Object message, ProtocolEncoderOutput out)Encodes higher-level message objects into binary or protocol-specific data.protected MessageEncoder<java.lang.Object>findEncoder(DemuxingProtocolEncoder.State state, java.lang.Class<?> type)private MessageEncoder<java.lang.Object>findEncoder(DemuxingProtocolEncoder.State state, java.lang.Class<?> type, java.util.Set<java.lang.Class<?>> triedClasses)private DemuxingProtocolEncoder.StategetState(IoSession session)
-
-
-
Field Detail
-
STATE
private static final AttributeKey STATE
-
type2encoderFactory
private final java.util.Map<java.lang.Class<?>,MessageEncoderFactory> type2encoderFactory
-
EMPTY_PARAMS
private static final java.lang.Class<?>[] EMPTY_PARAMS
-
-
Method Detail
-
addMessageEncoder
public void addMessageEncoder(java.lang.Class<?> messageType, java.lang.Class<? extends MessageEncoder> encoderClass)Add a new message encoder class for a given message type- Parameters:
messageType- The message typeencoderClass- The encoder class
-
addMessageEncoder
public <T> void addMessageEncoder(java.lang.Class<T> messageType, MessageEncoder<? super T> encoder)Add a new message encoder instance for a given message type- Type Parameters:
T- The message type- Parameters:
messageType- The message typeencoder- The encoder instance
-
addMessageEncoder
public <T> void addMessageEncoder(java.lang.Class<T> messageType, MessageEncoderFactory<? super T> factory)Add a new message encoder factory for a given message type- Type Parameters:
T- The message type- Parameters:
messageType- The message typefactory- The encoder factory
-
addMessageEncoder
public void addMessageEncoder(java.lang.Iterable<java.lang.Class<?>> messageTypes, java.lang.Class<? extends MessageEncoder> encoderClass)Add a new message encoder class for a list of message types- Parameters:
messageTypes- The message typesencoderClass- The encoder class
-
addMessageEncoder
public <T> void addMessageEncoder(java.lang.Iterable<java.lang.Class<? extends T>> messageTypes, MessageEncoder<? super T> encoder)Add a new message instance class for a list of message types- Type Parameters:
T- The message type- Parameters:
messageTypes- The message typesencoder- The encoder instance
-
addMessageEncoder
public <T> void addMessageEncoder(java.lang.Iterable<java.lang.Class<? extends T>> messageTypes, MessageEncoderFactory<? super T> factory)Add a new message encoder factory for a list of message types- Type Parameters:
T- The message type- Parameters:
messageTypes- The message typesfactory- The encoder factory
-
encode
public void encode(IoSession session, java.lang.Object message, ProtocolEncoderOutput out) throws java.lang.Exception
Encodes higher-level message objects into binary or protocol-specific data. MINA invokesProtocolEncoder.encode(IoSession, Object, ProtocolEncoderOutput)method with message which is popped from the session write queue, and then the encoder implementation puts encoded messages (typicallyIoBuffers) intoProtocolEncoderOutput.- Specified by:
encodein interfaceProtocolEncoder- Parameters:
session- The current Sessionmessage- the message to encodeout- TheProtocolEncoderOutputthat will receive the encoded message- Throws:
java.lang.Exception- if the message violated protocol specification
-
findEncoder
protected MessageEncoder<java.lang.Object> findEncoder(DemuxingProtocolEncoder.State state, java.lang.Class<?> type)
-
findEncoder
private MessageEncoder<java.lang.Object> findEncoder(DemuxingProtocolEncoder.State state, java.lang.Class<?> type, java.util.Set<java.lang.Class<?>> triedClasses)
-
dispose
public void dispose(IoSession session) throws java.lang.Exception
Releases all resources related with this encoder.- Specified by:
disposein interfaceProtocolEncoder- Parameters:
session- The current Session- Throws:
java.lang.Exception- if failed to dispose all resources
-
getState
private DemuxingProtocolEncoder.State getState(IoSession session) throws java.lang.Exception
- Throws:
java.lang.Exception
-
-