Author: trustin
Date: Mon Dec 10 23:06:13 2007
New Revision: 603158
URL: http://svn.apache.org/viewvc?rev=603158&view=rev
Log:
* Replaced messageReceived and messageSent handler methods in MessageHandler
with handleMessage() method
* DemuxingIoHandler.add/removeMessageHandler have been split into two; one for
receivedMessages and the other for sentMessages.
* Added ExceptionHandler.CLOSE for convenience
Modified:
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/DemuxingIoHandler.java
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/ExceptionHandler.java
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/MessageHandler.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/DemuxingIoHandler.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/handler/demux/DemuxingIoHandler.java?rev=603158&r1=603157&r2=603158&view=diff
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/DemuxingIoHandler.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/DemuxingIoHandler.java
Mon Dec 10 23:06:13 2007
@@ -35,8 +35,8 @@
* to the appropriate [EMAIL PROTECTED] MessageHandler}.
* <p>
* You can freely register and deregister [EMAIL PROTECTED] MessageHandler}s
using
- * [EMAIL PROTECTED] #addMessageHandler(Class, MessageHandler)} and
- * [EMAIL PROTECTED] #removeMessageHandler(Class)}.
+ * [EMAIL PROTECTED] #addReceivedMessageHandler(Class, MessageHandler)} and
+ * [EMAIL PROTECTED] #removeReceivedMessageHandler(Class)}.
* </p>
* <p>
* When <code>message</code> is received through a call to
@@ -70,8 +70,8 @@
* </p>
* <p>
* For efficiency searches will be cached. Calls to
- * [EMAIL PROTECTED] #addMessageHandler(Class, MessageHandler)} and
- * [EMAIL PROTECTED] #removeMessageHandler(Class)} clear this cache.
+ * [EMAIL PROTECTED] #addReceivedMessageHandler(Class, MessageHandler)} and
+ * [EMAIL PROTECTED] #removeReceivedMessageHandler(Class)} clear this cache.
* </p>
*
* @author The Apache MINA Project ([EMAIL PROTECTED])
@@ -79,10 +79,16 @@
*/
public class DemuxingIoHandler extends IoHandlerAdapter {
- private final Map<Class<?>, MessageHandler<?>> messageHandlerCache =
+ private final Map<Class<?>, MessageHandler<?>> receivedMessageHandlerCache
=
new ConcurrentHashMap<Class<?>, MessageHandler<?>>();
- private final Map<Class<?>, MessageHandler<?>> messageHandlers =
+ private final Map<Class<?>, MessageHandler<?>> receivedMessageHandlers =
+ new ConcurrentHashMap<Class<?>, MessageHandler<?>>();
+
+ private final Map<Class<?>, MessageHandler<?>> sentMessageHandlerCache =
+ new ConcurrentHashMap<Class<?>, MessageHandler<?>>();
+
+ private final Map<Class<?>, MessageHandler<?>> sentMessageHandlers =
new ConcurrentHashMap<Class<?>, MessageHandler<?>>();
private final Map<Class<?>, ExceptionHandler<?>> exceptionHandlerCache =
@@ -98,32 +104,58 @@
}
/**
- * Registers a [EMAIL PROTECTED] MessageHandler} that receives the
messages of
+ * Registers a [EMAIL PROTECTED] MessageHandler} that handles the received
messages of
* the specified <code>type</code>.
*
* @return the old handler if there is already a registered handler for
* the specified <tt>type</tt>. <tt>null</tt> otherwise.
*/
@SuppressWarnings("unchecked")
- public <E> MessageHandler<? super E> addMessageHandler(Class<E> type,
+ public <E> MessageHandler<? super E> addReceivedMessageHandler(Class<E>
type,
MessageHandler<? super E> handler) {
- messageHandlerCache.clear();
- return (MessageHandler<? super E>) messageHandlers.put(type, handler);
+ receivedMessageHandlerCache.clear();
+ return (MessageHandler<? super E>) receivedMessageHandlers.put(type,
handler);
}
/**
- * Deregisters a [EMAIL PROTECTED] MessageHandler} that receives the
messages of
- * the specified <code>type</code>.
+ * Deregisters a [EMAIL PROTECTED] MessageHandler} that handles the
received messages
+ * of the specified <code>type</code>.
*
* @return the removed handler if successfully removed. <tt>null</tt>
otherwise.
*/
@SuppressWarnings("unchecked")
- public <E> MessageHandler<? super E> removeMessageHandler(Class<E> type) {
- messageHandlerCache.clear();
- return (MessageHandler<? super E>) messageHandlers.remove(type);
+ public <E> MessageHandler<? super E> removeReceivedMessageHandler(Class<E>
type) {
+ receivedMessageHandlerCache.clear();
+ return (MessageHandler<? super E>)
receivedMessageHandlers.remove(type);
}
/**
+ * Registers a [EMAIL PROTECTED] MessageHandler} that handles the sent
messages of the
+ * specified <code>type</code>.
+ *
+ * @return the old handler if there is already a registered handler for
+ * the specified <tt>type</tt>. <tt>null</tt> otherwise.
+ */
+ @SuppressWarnings("unchecked")
+ public <E> MessageHandler<? super E> addSentMessageHandler(Class<E> type,
+ MessageHandler<? super E> handler) {
+ sentMessageHandlerCache.clear();
+ return (MessageHandler<? super E>) sentMessageHandlers.put(type,
handler);
+ }
+
+ /**
+ * Deregisters a [EMAIL PROTECTED] MessageHandler} that handles the sent
messages of
+ * the specified <code>type</code>.
+ *
+ * @return the removed handler if successfully removed. <tt>null</tt>
otherwise.
+ */
+ @SuppressWarnings("unchecked")
+ public <E> MessageHandler<? super E> removeSentMessageHandler(Class<E>
type) {
+ sentMessageHandlerCache.clear();
+ return (MessageHandler<? super E>) sentMessageHandlers.remove(type);
+ }
+
+ /**
* Registers a [EMAIL PROTECTED] MessageHandler} that receives the
messages of
* the specified <code>type</code>.
*
@@ -157,15 +189,23 @@
*/
@SuppressWarnings("unchecked")
public <E> MessageHandler<? super E> getMessageHandler(Class<E> type) {
- return (MessageHandler<? super E>) messageHandlers.get(type);
+ return (MessageHandler<? super E>) receivedMessageHandlers.get(type);
}
/**
* Returns the [EMAIL PROTECTED] Map} which contains all [EMAIL PROTECTED]
MessageHandler}
- * pairs registered to this handler.
+ * pairs registered to this handler for received messages.
*/
- public Map<Class<?>, MessageHandler<?>> getMessageHandlerMap() {
- return Collections.unmodifiableMap(messageHandlers);
+ public Map<Class<?>, MessageHandler<?>> getReceivedMessageHandlerMap() {
+ return Collections.unmodifiableMap(receivedMessageHandlers);
+ }
+
+ /**
+ * Returns the [EMAIL PROTECTED] Map} which contains all [EMAIL PROTECTED]
MessageHandler}
+ * pairs registered to this handler for sent messages.
+ */
+ public Map<Class<?>, MessageHandler<?>> getSentMessageHandlerMap() {
+ return Collections.unmodifiableMap(sentMessageHandlers);
}
/**
@@ -178,28 +218,30 @@
/**
* Forwards the received events into the appropriate [EMAIL PROTECTED]
MessageHandler}
- * which is registered by [EMAIL PROTECTED] #addMessageHandler(Class,
MessageHandler)}.
+ * which is registered by [EMAIL PROTECTED]
#addReceivedMessageHandler(Class, MessageHandler)}.
*/
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
- MessageHandler<Object> handler =
findMessageHandler(message.getClass());
+ MessageHandler<Object> handler =
findReceivedMessageHandler(message.getClass());
if (handler != null) {
- handler.messageReceived(session, message);
+ handler.handleMessage(session, message);
} else {
throw new UnknownMessageTypeException(
- "No message handler found for message: " + message);
+ "No message handler found for message type: " +
+ message.getClass().getSimpleName());
}
}
@Override
public void messageSent(IoSession session, Object message) throws
Exception {
- MessageHandler<Object> handler =
findMessageHandler(message.getClass());
+ MessageHandler<Object> handler =
findSentMessageHandler(message.getClass());
if (handler != null) {
- handler.messageSent(session, message);
+ handler.handleMessage(session, message);
} else {
throw new UnknownMessageTypeException(
- "No handler found for message: " +
message.getClass().getName());
+ "No handler found for message type: " +
+ message.getClass().getSimpleName());
}
}
@@ -210,12 +252,17 @@
handler.exceptionCaught(session, cause);
} else {
throw new UnknownMessageTypeException(
- "No handler found for exception: " +
cause.getClass().getName());
+ "No handler found for exception type: " +
+ cause.getClass().getSimpleName());
}
}
- protected MessageHandler<Object> findMessageHandler(Class<?> type) {
- return findMessageHandler(type, null);
+ protected MessageHandler<Object> findReceivedMessageHandler(Class<?> type)
{
+ return findReceivedMessageHandler(type, null);
+ }
+
+ protected MessageHandler<Object> findSentMessageHandler(Class<?> type) {
+ return findSentMessageHandler(type, null);
}
protected ExceptionHandler<Throwable> findExceptionHandler(Class<? extends
Throwable> type) {
@@ -223,11 +270,19 @@
}
@SuppressWarnings("unchecked")
- private MessageHandler<Object> findMessageHandler(
+ private MessageHandler<Object> findReceivedMessageHandler(
+ Class type, Set<Class> triedClasses) {
+
+ return (MessageHandler<Object>) findHandler(
+ receivedMessageHandlers, receivedMessageHandlerCache, type,
triedClasses);
+ }
+
+ @SuppressWarnings("unchecked")
+ private MessageHandler<Object> findSentMessageHandler(
Class type, Set<Class> triedClasses) {
return (MessageHandler<Object>) findHandler(
- messageHandlers, messageHandlerCache, type, triedClasses);
+ sentMessageHandlers, sentMessageHandlerCache, type,
triedClasses);
}
@SuppressWarnings("unchecked")
Modified:
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/ExceptionHandler.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/handler/demux/ExceptionHandler.java?rev=603158&r1=603157&r2=603158&view=diff
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/ExceptionHandler.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/ExceptionHandler.java
Mon Dec 10 23:06:13 2007
@@ -32,11 +32,22 @@
*/
public interface ExceptionHandler<E extends Throwable> {
/**
- * A [EMAIL PROTECTED] ExceptionHandler} that does nothing. This is
usefule when
- * you want to ignore messages of the specific type silently.
+ * A [EMAIL PROTECTED] ExceptionHandler} that does nothing. This is
useful when
+ * you want to ignore an exception of a specific type silently.
*/
static ExceptionHandler<Throwable> NOOP = new
ExceptionHandler<Throwable>() {
public void exceptionCaught(IoSession session, Throwable cause) {}
+ };
+
+ /**
+ * A [EMAIL PROTECTED] ExceptionHandler} that closes the session
immediately.
+ * This is useful when you want to close the session when an exception of
+ * a specific type is raised.
+ */
+ static ExceptionHandler<Throwable> CLOSE = new
ExceptionHandler<Throwable>() {
+ public void exceptionCaught(IoSession session, Throwable cause) {
+ session.close();
+ }
};
/**
Modified:
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/MessageHandler.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/handler/demux/MessageHandler.java?rev=603158&r1=603157&r2=603158&view=diff
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/MessageHandler.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/handler/demux/MessageHandler.java
Mon Dec 10 23:06:13 2007
@@ -23,9 +23,10 @@
/**
* A handler interface that [EMAIL PROTECTED] DemuxingIoHandler} forwards
- * <code>messageReceived</code> events to. You have to register your
- * handler with the type of message you want to get notified using
- * [EMAIL PROTECTED] DemuxingIoHandler#addMessageHandler(Class,
MessageHandler)}.
+ * <tt>messageReceived</tt> or <tt>messageSent</tt> events to. You have to
+ * register your handler with the type of the message you want to get notified
+ * using [EMAIL PROTECTED] DemuxingIoHandler#addReceivedMessageHandler(Class,
MessageHandler)}
+ * or [EMAIL PROTECTED] DemuxingIoHandler#addSentMessageHandler(Class,
MessageHandler)}.
*
* @author The Apache MINA Project ([EMAIL PROTECTED])
* @version $Rev$, $Date$
@@ -33,22 +34,15 @@
public interface MessageHandler<E> {
/**
* A [EMAIL PROTECTED] MessageHandler} that does nothing. This is useful
when
- * you want to ignore messages of the specific type silently.
+ * you want to ignore a message of a specific type silently.
*/
static MessageHandler<Object> NOOP = new MessageHandler<Object>() {
- public void messageReceived(IoSession session, Object message) {}
- public void messageSent(IoSession session, Object message) {}
+ public void handleMessage(IoSession session, Object message) {}
};
/**
- * Invoked when the specific type of message is received from the
- * specified <code>session</code>.
+ * Invoked when the specific type of message is received from or sent to
+ * the specified <code>session</code>.
*/
- void messageReceived(IoSession session, E message) throws Exception;
-
- /**
- * Invoked when the specific type of message is sent out to the
- * specified <code>session</code>.
- */
- void messageSent(IoSession session, E message) throws Exception;
+ void handleMessage(IoSession session, E message) throws Exception;
}