Class DemuxingIoHandler

java.lang.Object
org.apache.mina.common.IoHandlerAdapter
org.apache.mina.handler.demux.DemuxingIoHandler
All Implemented Interfaces:
IoHandler

public class DemuxingIoHandler extends IoHandlerAdapter
A IoHandler that demuxes messageReceived events to the appropriate MessageHandler.

You can freely register and deregister MessageHandlers using addMessageHandler(Class, MessageHandler) and removeMessageHandler(Class).

When message is received through a call to messageReceived(IoSession, Object) the class of the message object will be used to find a MessageHandler for that particular message type. If no MessageHandler instance can be found for the immediate class (i.e. message.getClass()) the interfaces implemented by the immediate class will be searched in depth-first order. If no match can be found for any of the interfaces the search will be repeated recursively for the superclass of the immediate class (i.e. message.getClass().getSuperclass()).

Consider the following type hierarchy (Cx are classes while Ix are interfaces):

     C3 - I7 - I9
      |    |   /\
      |   I8  I3 I4
      |
     C2 - I5 - I6
      |
     C1 - I1 - I2 - I4
      |         |
      |        I3
    Object          
 
When message is of type C3 this hierarchy will be searched in the following order: C3, I7, I8, I9, I3, I4, C2, I5, I6, C1, I1, I2, I3, I4, Object.

For efficiency searches will be cached. Calls to addMessageHandler(Class, MessageHandler) and removeMessageHandler(Class) clear this cache.