org.apache.mina.handler.demux
Class DemuxingIoHandler

java.lang.Object
  extended by org.apache.mina.common.IoHandlerAdapter
      extended by 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.

Version:
$Rev: 555855 $, $Date: 2007-07-13 05:19:00 +0200 (Fri, 13 Jul 2007) $
Author:
The Apache Directory Project (mina-dev@directory.apache.org)

Constructor Summary
DemuxingIoHandler()
          Creates a new instance with no registered MessageHandlers.
 
Method Summary
<E> MessageHandler<? super E>
addMessageHandler(Class<E> type, MessageHandler<? super E> handler)
          Registers a MessageHandler that receives the messages of the specified type.
protected  MessageHandler<Object> findHandler(Class type)
           
<E> MessageHandler<? super E>
getMessageHandler(Class<E> type)
          Returns the MessageHandler which is registered to process the specified type.
 Map<Class,MessageHandler> getMessageHandlerMap()
          Returns the Map which contains all messageType-MessageHandler pairs registered to this handler.
 void messageReceived(IoSession session, Object message)
          Forwards the received events into the appropriate MessageHandler which is registered by addMessageHandler(Class, MessageHandler).
<E> MessageHandler<? super E>
removeMessageHandler(Class<E> type)
          Deregisters a MessageHandler that receives the messages of the specified type.
 
Methods inherited from class org.apache.mina.common.IoHandlerAdapter
exceptionCaught, messageSent, sessionClosed, sessionCreated, sessionIdle, sessionOpened
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DemuxingIoHandler

public DemuxingIoHandler()
Creates a new instance with no registered MessageHandlers.

Method Detail

addMessageHandler

public <E> MessageHandler<? super E> addMessageHandler(Class<E> type,
                                                       MessageHandler<? super E> handler)
Registers a MessageHandler that receives the messages of the specified type.

Returns:
the old handler if there is already a registered handler for the specified type. null otherwise.

removeMessageHandler

public <E> MessageHandler<? super E> removeMessageHandler(Class<E> type)
Deregisters a MessageHandler that receives the messages of the specified type.

Returns:
the removed handler if successfully removed. null otherwise.

getMessageHandler

public <E> MessageHandler<? super E> getMessageHandler(Class<E> type)
Returns the MessageHandler which is registered to process the specified type.


getMessageHandlerMap

public Map<Class,MessageHandler> getMessageHandlerMap()
Returns the Map which contains all messageType-MessageHandler pairs registered to this handler.


messageReceived

public void messageReceived(IoSession session,
                            Object message)
                     throws Exception
Forwards the received events into the appropriate MessageHandler which is registered by addMessageHandler(Class, MessageHandler).

Specified by:
messageReceived in interface IoHandler
Overrides:
messageReceived in class IoHandlerAdapter
Throws:
Exception

findHandler

protected MessageHandler<Object> findHandler(Class type)


Copyright © 2004-2009 Apache MINA Project. All Rights Reserved.