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);
}
});