You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2011/04/09 19:14:37 UTC
svn commit: r1090631 - in
/mina/branches/3.0/core/src/main/java/org/apache/mina: IoService.java
service/AbstractIoService.java service/IoHandler.java
Author: elecharny
Date: Sat Apr 9 17:14:37 2011
New Revision: 1090631
URL: http://svn.apache.org/viewvc?rev=1090631&view=rev
Log:
Added the IoHandler in the AbstractIoService
Added:
mina/branches/3.0/core/src/main/java/org/apache/mina/service/IoHandler.java
Modified:
mina/branches/3.0/core/src/main/java/org/apache/mina/IoService.java
mina/branches/3.0/core/src/main/java/org/apache/mina/service/AbstractIoService.java
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/IoService.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/IoService.java?rev=1090631&r1=1090630&r2=1090631&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/IoService.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/IoService.java Sat Apr 9 17:14:37 2011
@@ -21,6 +21,8 @@ package org.apache.mina;
import java.util.Map;
+import org.apache.mina.service.IoHandler;
+
/**
* Base interface for all {@link IoServer}s and {@link IoClient}s
* that provide I/O service and manage {@link IoSession}s.
@@ -49,4 +51,15 @@ public interface IoService {
* related with this service.
*/
void removeListener(IoServiceListener listener);
+
+ /**
+ * Returns the handler which will handle all the connections managed by this service.
+ */
+
+ IoHandler getHandler();
+ /**
+ * Sets the handler which will handle all connections managed by this service. The handler
+ * can only be set before the service is started.
+ */
+ void setHandler(IoHandler handler);
}
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/service/AbstractIoService.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/service/AbstractIoService.java?rev=1090631&r1=1090630&r2=1090631&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/service/AbstractIoService.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/service/AbstractIoService.java Sat Apr 9 17:14:37 2011
@@ -19,14 +19,14 @@
*/
package org.apache.mina.service;
-import org.apache.mina.IoService;
-import org.apache.mina.IoServiceListener;
-import org.apache.mina.IoSession;
-
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.mina.IoService;
+import org.apache.mina.IoServiceListener;
+import org.apache.mina.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,6 +42,11 @@ public abstract class AbstractIoService
private final Map<Long, IoSession> managedSessions = new ConcurrentHashMap<Long, IoSession>();
/**
+ * The handler, the interface with the application part.
+ */
+ private IoHandler handler;
+
+ /**
* Placeholder for storing all the listeners added
*/
private final List<IoServiceListener> listeners = new CopyOnWriteArrayList<IoServiceListener>();
@@ -75,4 +80,33 @@ public abstract class AbstractIoService
listeners.remove(listener);
}
}
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public final IoHandler getHandler() {
+ return handler;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setHandler(IoHandler handler) {
+ if (handler == null) {
+ throw new IllegalArgumentException("handler cannot be null");
+ }
+
+ // TODO: check the service state, we should not be able to set the handler
+ // if the service is already started
+ /*
+ if (isActive()) {
+ throw new IllegalStateException(
+ "handler cannot be set while the service is active.");
+ }
+ */
+
+ this.handler = handler;
+ }
}
\ No newline at end of file
Added: mina/branches/3.0/core/src/main/java/org/apache/mina/service/IoHandler.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/service/IoHandler.java?rev=1090631&view=auto
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/service/IoHandler.java (added)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/service/IoHandler.java Sat Apr 9 17:14:37 2011
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.service;
+
+import java.io.IOException;
+
+import org.apache.mina.IdleStatus;
+import org.apache.mina.IoSession;
+
+/**
+ * Handles all I/O events fired by MINA. This is the Interface an application will implement
+ * to manage the incoming messages and the outgoing responses.<br/>
+ * An IoHandler handles a set of events :
+ * <ul>
+ * <li>SessionCreated : fired when a new session has been created. It's not opened yet</li>
+ * <li>SessionOpened : fired when a new session is opened (ie a client has just bound)</li>
+ * <li>SessionClosed : fired when the session has been closed. No more message can be received or sent</li>
+ * <li>SessionIdle : fired when a session has been inactive for a certain amount of time (configurable)</li>
+ * <li>MessageReceived : fired when a message has just been received</li>
+ * <li>MessageSent : fired when the message has been fully sent to the client. Note that we can't know
+ * if the client has received it, we can just tell that the message has been delivered</li>
+ * <li>ExceptionCaught : fired when some exception has been generated during the processing of an
+ * event for the session </li>
+ * </ul>
+ *
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public interface IoHandler {
+ /**
+ * Invoked from an I/O processor thread when a new connection has been created.
+ * Because this method is supposed to be called from the same thread that
+ * handles I/O of multiple sessions, please implement this method to perform
+ * tasks that consumes minimal amount of time such as socket parameter
+ * and user-defined session attribute initialization.
+ */
+ void sessionCreated(IoSession session) throws Exception;
+
+ /**
+ * Invoked when a connection has been opened. This method is invoked after
+ * {@link #sessionCreated(IoSession)}. The biggest difference from
+ * {@link #sessionCreated(IoSession)} is that it's invoked from other thread
+ * than an I/O processor thread once thread model is configured properly.
+ */
+ void sessionOpened(IoSession session) throws Exception;
+
+ /**
+ * Invoked when a connection is closed.
+ */
+ void sessionClosed(IoSession session) throws Exception;
+
+ /**
+ * Invoked with the related {@link IdleStatus} when a connection becomes idle.
+ * This method is not invoked if the transport type is UDP; it's a known bug,
+ * and will be fixed in 2.0.
+ */
+ void sessionIdle(IoSession session, IdleStatus status) throws Exception;
+
+ /**
+ * Invoked when any exception is thrown by user {@link IoHandler}
+ * implementation or by MINA. If <code>cause</code> is an instance of
+ * {@link IOException}, MINA will close the connection automatically.
+ */
+ void exceptionCaught(IoSession session, Throwable cause) throws Exception;
+
+ /**
+ * Invoked when a message is received.
+ */
+ void messageReceived(IoSession session, Object message) throws Exception;
+
+ /**
+ * Invoked when a message written by {@link IoSession#write(Object)} is
+ * sent out.
+ */
+ void messageSent(IoSession session, Object message) throws Exception;
+}
\ No newline at end of file