Class DemuxingProtocolEncoder

java.lang.Object
org.apache.mina.filter.codec.demux.DemuxingProtocolEncoder
All Implemented Interfaces:
ProtocolEncoder

public class DemuxingProtocolEncoder extends Object implements ProtocolEncoder
A composite ProtocolEncoder that demultiplexes incoming message encoding requests into an appropriate MessageEncoder.

Disposing resources acquired by MessageEncoder

Override dispose(IoSession) method. Please don't forget to call super.dispose().

See Also:
  • Field Details

  • Constructor Details

    • DemuxingProtocolEncoder

      public DemuxingProtocolEncoder()
  • Method Details

    • addMessageEncoder

      public void addMessageEncoder(Class<?> messageType, Class<? extends MessageEncoder> encoderClass)
      Add a new message encoder class for a given message type
      Parameters:
      messageType - The message type
      encoderClass - The encoder class
    • addMessageEncoder

      public <T> void addMessageEncoder(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 type
      encoder - The encoder instance
    • addMessageEncoder

      public <T> void addMessageEncoder(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 type
      factory - The encoder factory
    • addMessageEncoder

      public void addMessageEncoder(Iterable<Class<?>> messageTypes, Class<? extends MessageEncoder> encoderClass)
      Add a new message encoder class for a list of message types
      Parameters:
      messageTypes - The message types
      encoderClass - The encoder class
    • addMessageEncoder

      public <T> void addMessageEncoder(Iterable<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 types
      encoder - The encoder instance
    • addMessageEncoder

      public <T> void addMessageEncoder(Iterable<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 types
      factory - The encoder factory
    • encode

      public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception
      Encodes higher-level message objects into binary or protocol-specific data. MINA invokes ProtocolEncoder.encode(IoSession, Object, ProtocolEncoderOutput) method with message which is popped from the session write queue, and then the encoder implementation puts encoded messages (typically IoBuffers) into ProtocolEncoderOutput.
      Specified by:
      encode in interface ProtocolEncoder
      Parameters:
      session - The current Session
      message - the message to encode
      out - The ProtocolEncoderOutput that will receive the encoded message
      Throws:
      Exception - if the message violated protocol specification
    • findEncoder

      protected MessageEncoder<Object> findEncoder(DemuxingProtocolEncoder.State state, Class<?> type)
    • findEncoder

      private MessageEncoder<Object> findEncoder(DemuxingProtocolEncoder.State state, Class<?> type, Set<Class<?>> triedClasses)
    • dispose

      public void dispose(IoSession session) throws Exception
      Releases all resources related with this encoder.
      Specified by:
      dispose in interface ProtocolEncoder
      Parameters:
      session - The current Session
      Throws:
      Exception - if failed to dispose all resources
    • getState

      private DemuxingProtocolEncoder.State getState(IoSession session) throws Exception
      Throws:
      Exception