Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.mina.handler.demux
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 `MessageHandler`s 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 `MessageHandler`s.

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 `MessageHandler`s.

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)

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

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