You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2012/11/13 18:51:38 UTC

svn commit: r1408859 - in /mina/mina/trunk: core/src/main/java/org/apache/mina/api/ core/src/main/java/org/apache/mina/service/ examples/src/main/java/org/apache/mina/examples/echoserver/ examples/src/main/java/org/apache/mina/examples/udpecho/

Author: jvermillard
Date: Tue Nov 13 17:51:36 2012
New Revision: 1408859

URL: http://svn.apache.org/viewvc?rev=1408859&view=rev
Log:
reintroduced IoHandler killed IoServiceListener

Added:
    mina/mina/trunk/core/src/main/java/org/apache/mina/api/AbstractIoHandler.java
    mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoHandler.java
Removed:
    mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoServiceListener.java
Modified:
    mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java
    mina/mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java
    mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/echoserver/NioEchoServer.java
    mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java

Added: mina/mina/trunk/core/src/main/java/org/apache/mina/api/AbstractIoHandler.java
URL: http://svn.apache.org/viewvc/mina/mina/trunk/core/src/main/java/org/apache/mina/api/AbstractIoHandler.java?rev=1408859&view=auto
==============================================================================
--- mina/mina/trunk/core/src/main/java/org/apache/mina/api/AbstractIoHandler.java (added)
+++ mina/mina/trunk/core/src/main/java/org/apache/mina/api/AbstractIoHandler.java Tue Nov 13 17:51:36 2012
@@ -0,0 +1,76 @@
+/**
+ * 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.api;
+
+/**
+ * A convenient {@link IoHandler} implementation to be sub-classed for easier {@link IoHandler} implementation.
+ * 
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public abstract class AbstractIoHandler implements IoHandler {
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void sessionOpened(final IoSession session) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void sessionClosed(final IoSession session) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void sessionIdle(final IoSession session, final IdleStatus status) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void messageReceived(final IoSession session, final Object message) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void messageSent(final IoSession session, final Object message) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void serviceActivated(final IoService service) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void serviceInactivated(final IoService service) {
+    }
+}

Added: mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoHandler.java
URL: http://svn.apache.org/viewvc/mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoHandler.java?rev=1408859&view=auto
==============================================================================
--- mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoHandler.java (added)
+++ mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoHandler.java Tue Nov 13 17:51:36 2012
@@ -0,0 +1,75 @@
+/*
+ *  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.api;
+
+public interface IoHandler {
+
+    /**
+     * Invoked when a connection has been opened.
+     * 
+     * @param session {@link IoSession} associated with the invocation
+     */
+    void sessionOpened(IoSession session);
+
+    /**
+     * Invoked when a connection is closed.
+     * 
+     * @param session {@link IoSession} associated with the invocation
+     */
+    void sessionClosed(IoSession session);
+
+    /**
+     * Invoked with the related {@link IdleStatus} when a connection becomes idle.
+     * 
+     * @param session {@link IoSession} associated with the invocation
+     */
+    void sessionIdle(IoSession session, IdleStatus status);
+
+    /**
+     * Invoked when a message is received.
+     * 
+     * @param session {@link IoSession} associated with the invocation
+     * @param message the incoming message to process
+     */
+    void messageReceived(IoSession session, Object message);
+
+    /**
+     * Invoked when a high level message was written to the low level O/S buffer.
+     * 
+     * @param session {@link IoSession} associated with the invocation
+     * @param message the incoming message to process
+     */
+    void messageSent(IoSession session, Object message);
+
+    /**
+     * Invoked when a new service is activated by an {@link IoService}.
+     * 
+     * @param service the {@link IoService}
+     */
+    void serviceActivated(IoService service);
+
+    /**
+     * Invoked when a service is inactivated by an {@link IoService}.
+     * 
+     * @param service the {@link IoService}
+     */
+    void serviceInactivated(IoService service);
+
+}

Modified: mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java
URL: http://svn.apache.org/viewvc/mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java?rev=1408859&r1=1408858&r2=1408859&view=diff
==============================================================================
--- mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java (original)
+++ mina/mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java Tue Nov 13 17:51:36 2012
@@ -22,8 +22,8 @@ package org.apache.mina.api;
 import java.util.Map;
 
 /**
- * Base interface for all {@link IoServer}s and {@link IoClient}s that provide I/O service 
- * and manage {@link IoSession}s.
+ * Base interface for all {@link IoServer}s and {@link IoClient}s that provide I/O service and manage {@link IoSession}
+ * s.
  * 
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
@@ -37,18 +37,11 @@ public interface IoService {
     Map<Long, IoSession> getManagedSessions();
 
     /**
-     * Adds some {@link IoServiceListener} that listens any events related with this service.
+     * Set the {@link IoHandler} in charge of your business logic for this service.
      * 
-     * @param listeners The {@link IoServiceListener} to add
+     * @param handler the hanlder called for every event of the service (new connections, messages receiveds, etc..)
      */
-    void addListeners(IoServiceListener... listeners);
-
-    /**
-     * Removed some existing {@link IoServiceListener} that listens any events related with this service.
-     * 
-     * @param listeners The {@link IoServiceListener} to rmove
-     */
-    void removeListeners(IoServiceListener... listeners);
+    void setIoHandler(IoHandler handler);
 
     /**
      * Get the list of filters installed on this service
@@ -65,8 +58,7 @@ public interface IoService {
     void setFilters(IoFilter... filters);
 
     /**
-     * Returns the default configuration of the new {@link IoSession}s
-     * created by this service.
+     * Returns the default configuration of the new {@link IoSession}s created by this service.
      * 
      * @return The default configuration for this {@link IoService}
      */

Modified: mina/mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java
URL: http://svn.apache.org/viewvc/mina/mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java?rev=1408859&r1=1408858&r2=1408859&view=diff
==============================================================================
--- mina/mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java (original)
+++ mina/mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java Tue Nov 13 17:51:36 2012
@@ -19,14 +19,12 @@
  */
 package org.apache.mina.service;
 
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.mina.api.IoFilter;
+import org.apache.mina.api.IoHandler;
 import org.apache.mina.api.IoService;
-import org.apache.mina.api.IoServiceListener;
 import org.apache.mina.api.IoSession;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,10 +44,8 @@ public abstract class AbstractIoService 
     /** The placeholder of managed open sessions */
     private final Map<Long, IoSession> managedSessions = new ConcurrentHashMap<Long, IoSession>();
 
-    /**
-     * Placeholder for storing all the listeners added
-     */
-    private final List<IoServiceListener> listeners = new CopyOnWriteArrayList<IoServiceListener>();
+    /** The high level business logic */
+    private IoHandler handler;
 
     /**
      * The Service states
@@ -85,40 +81,11 @@ public abstract class AbstractIoService 
     }
 
     /**
-     * 
-     * {@inheritDoc}
-     */
-    @Override
-    public void addListeners(final IoServiceListener... listeners) {
-        if (listeners != null) {
-            for (IoServiceListener listener : listeners) {
-                // Don't add an existing listener into the list
-                if (!this.listeners.contains(listener)) {
-                    this.listeners.add(listener);
-                }
-            }
-
-            return;
-        }
-
-        LOG.warn("Trying to add Null Listener");
-    }
-
-    /**
-     * 
      * {@inheritDoc}
      */
     @Override
-    public void removeListeners(final IoServiceListener... listeners) {
-        if (listeners != null) {
-            for (IoServiceListener listener : listeners) {
-                this.listeners.remove(listener);
-            }
-
-            return;
-        }
-
-        LOG.warn("Trying to remove Null Listener");
+    public void setIoHandler(final IoHandler handler) {
+        this.handler = handler;
     }
 
     /**
@@ -202,8 +169,8 @@ public abstract class AbstractIoService 
      * Inform all current the listeners of the service activation.
      */
     protected void fireServiceActivated() {
-        for (IoServiceListener listener : this.listeners) {
-            listener.serviceActivated(this);
+        if (handler != null) {
+            handler.serviceActivated(this);
         }
     }
 
@@ -211,23 +178,9 @@ public abstract class AbstractIoService 
      * Inform all current the listeners of the service desactivation.
      */
     protected void fireServiceInactivated() {
-        for (IoServiceListener listener : this.listeners) {
-            listener.serviceInactivated(this);
-        }
-    }
-
-    public void fireSessionCreated(final IoSession session) {
-        for (IoServiceListener listener : this.listeners) {
-            listener.sessionCreated(session);
-        }
-        this.managedSessions.put(session.getId(), session);
-    }
-
-    public void fireSessionDestroyed(final IoSession session) {
-        for (IoServiceListener listener : this.listeners) {
-            listener.sessionDestroyed(session);
+        if (handler != null) {
+            handler.serviceInactivated(this);
         }
-        this.managedSessions.remove(session.getId());
     }
 
     private IoFilter[] filters;

Modified: mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/echoserver/NioEchoServer.java
URL: http://svn.apache.org/viewvc/mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/echoserver/NioEchoServer.java?rev=1408859&r1=1408858&r2=1408859&view=diff
==============================================================================
--- mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/echoserver/NioEchoServer.java (original)
+++ mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/echoserver/NioEchoServer.java Tue Nov 13 17:51:36 2012
@@ -25,10 +25,9 @@ import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.nio.ByteBuffer;
 
+import org.apache.mina.api.AbstractIoHandler;
 import org.apache.mina.api.IdleStatus;
 import org.apache.mina.api.IoFilter;
-import org.apache.mina.api.IoService;
-import org.apache.mina.api.IoServiceListener;
 import org.apache.mina.api.IoSession;
 import org.apache.mina.filter.logging.LoggingFilter;
 import org.apache.mina.filterchain.ReadFilterChainController;
@@ -38,7 +37,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * A basic Acceptor test
+ * A basic Server test
  * 
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  * 
@@ -93,36 +92,19 @@ public class NioEchoServer {
             }
         });
 
-        acceptor.addListeners(new IoServiceListener() {
-
-            @Override
-            public void sessionDestroyed(final IoSession session) {
-                LOG.info("session destroyed {}", session);
-
-            }
-
+        acceptor.setIoHandler(new AbstractIoHandler() {
             @Override
-            public void sessionCreated(final IoSession session) {
-                LOG.info("session created {}", session);
+            public void sessionOpened(final IoSession session) {
+                LOG.info("session opened {}", session);
 
                 final String welcomeStr = "welcome\n";
                 final ByteBuffer bf = ByteBuffer.allocate(welcomeStr.length());
                 bf.put(welcomeStr.getBytes());
                 bf.flip();
                 session.write(bf);
-            }
-
-            @Override
-            public void serviceInactivated(final IoService service) {
-                LOG.info("service deactivated {}", service);
-            }
 
-            @Override
-            public void serviceActivated(final IoService service) {
-                LOG.info("service activated {}", service);
             }
         });
-
         try {
             final SocketAddress address = new InetSocketAddress(9999);
             acceptor.bind(address);

Modified: mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java
URL: http://svn.apache.org/viewvc/mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java?rev=1408859&r1=1408858&r2=1408859&view=diff
==============================================================================
--- mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java (original)
+++ mina/mina/trunk/examples/src/main/java/org/apache/mina/examples/udpecho/NioUdpEchoServer.java Tue Nov 13 17:51:36 2012
@@ -24,10 +24,9 @@ import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.nio.ByteBuffer;
 
+import org.apache.mina.api.AbstractIoHandler;
 import org.apache.mina.api.IdleStatus;
 import org.apache.mina.api.IoFilter;
-import org.apache.mina.api.IoService;
-import org.apache.mina.api.IoServiceListener;
 import org.apache.mina.api.IoSession;
 import org.apache.mina.filter.logging.LoggingFilter;
 import org.apache.mina.filterchain.ReadFilterChainController;
@@ -91,33 +90,17 @@ public class NioUdpEchoServer {
             }
         });
 
-        server.addListeners(new IoServiceListener() {
-
-            @Override
-            public void sessionDestroyed(final IoSession session) {
-                LOG.info("session destroyed {}", session);
-
-            }
-
+        server.setIoHandler(new AbstractIoHandler() {
             @Override
-            public void sessionCreated(final IoSession session) {
-                LOG.info("session created {}", session);
+            public void sessionOpened(final IoSession session) {
+                LOG.info("session opened {}", session);
 
                 final String welcomeStr = "welcome\n";
                 final ByteBuffer bf = ByteBuffer.allocate(welcomeStr.length());
                 bf.put(welcomeStr.getBytes());
                 bf.flip();
                 session.write(bf);
-            }
 
-            @Override
-            public void serviceInactivated(final IoService service) {
-                LOG.info("service deactivated {}", service);
-            }
-
-            @Override
-            public void serviceActivated(final IoService service) {
-                LOG.info("service activated {}", service);
             }
         });