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 2011/08/20 17:44:06 UTC

svn commit: r1159886 - in /mina/branches/3.0/core/src: main/java/org/apache/mina/api/ main/java/org/apache/mina/filter/logging/ main/java/org/apache/mina/filterchain/ test/java/org/apache/mina/filterchain/

Author: jvermillard
Date: Sat Aug 20 15:44:05 2011
New Revision: 1159886

URL: http://svn.apache.org/viewvc?rev=1159886&view=rev
Log:
simplification of filter chain, the current index on the chain is sorted in the filterchain. so concurrent running will need a filterchain copy. 

Modified:
    mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilter.java
    mina/branches/3.0/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
    mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
    mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/ReadFilterChainController.java
    mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/WriteFilterChainController.java
    mina/branches/3.0/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilter.java?rev=1159886&r1=1159885&r2=1159886&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilter.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilter.java Sat Aug 20 15:44:05 2011
@@ -68,7 +68,7 @@ public interface IoFilter {
      * @param session {@link IoSession} associated with the invocation
      * @param message the incoming message to process
      */
-    void messageReceived(IoSession session, Object message, ReadFilterChainController controller, int currentPosition);
+    void messageReceived(IoSession session, Object message, ReadFilterChainController controller);
 
     /**
      * Invoked when a message is under writing. The filter is supposed to apply the needed transformation.
@@ -76,5 +76,5 @@ public interface IoFilter {
      * @param session {@link IoSession} associated with the invocation
      * @param message the message to process before writing
      */
-    void messageWriting(IoSession session, Object message, WriteFilterChainController controller, int currentPosition);
+    void messageWriting(IoSession session, Object message, WriteFilterChainController controller);
 }
\ No newline at end of file

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java?rev=1159886&r1=1159885&r2=1159886&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java Sat Aug 20 15:44:05 2011
@@ -170,17 +170,15 @@ public class LoggingFilter implements Io
     }
 
     @Override
-    public void messageReceived(IoSession session, Object message, ReadFilterChainController controller,
-            int currentPosition) {
+    public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
         log(messageReceivedLevel, "RECEIVED: {}", message);
-        controller.callReadNextFilter(session, currentPosition, message);
+        controller.callReadNextFilter(session, message);
     }
 
     @Override
-    public void messageWriting(IoSession session, Object message, WriteFilterChainController controller,
-            int currentPosition) {
+    public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) {
         log(messageWritingLevel, "WRITTING: {}", message);
-        controller.callWriteNextFilter(session, currentPosition, message);
+        controller.callWriteNextFilter(session, message);
     }
 
     //=========================

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java?rev=1159886&r1=1159885&r2=1159886&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java Sat Aug 20 15:44:05 2011
@@ -83,57 +83,62 @@ public class DefaultIoFilterChain implem
         }
     }
 
+    private int readChainPosition;
+
     @Override
     public void processMessageReceived(IoSession session, Object message) {
         LOG.debug("processing message '{}' received event ", message);
         if (chain.isEmpty()) {
             LOG.debug("Nothing to do, the chain is empty");
         } else {
+            readChainPosition = 0;
             // we call the first filter, it's supposed to call the next ones using the filter chain controller
-            chain.get(0).messageReceived(session, message, this, 0);
+            chain.get(readChainPosition).messageReceived(session, message, this);
         }
     }
 
+    private int writeChainPosition;
+
     @Override
     public void processMessageWriting(IoSession session, Object message) {
         LOG.debug("processing message '{}' writing event ", message);
         if (chain.isEmpty()) {
             LOG.debug("Nothing to do, the chain is empty");
         } else {
+            writeChainPosition = chain.size() - 1;
             // we call the first filter, it's supposed to call the next ones using the filter chain controller
-            chain.get(0).messageWriting(session, message, this, 0);
+            chain.get(writeChainPosition).messageWriting(session, message, this);
         }
     }
 
     @Override
-    public String toString() {
-        StringBuilder bldr = new StringBuilder("IoFilterChain {");
-        int index = 0;
-        for (IoFilter filter : chain) {
-            bldr.append(index).append(":").append(filter).append(", ");
-        }
-        return bldr.append("}").toString();
-    }
-
-    @Override
-    public void callWriteNextFilter(IoSession session, int currentPosition, Object message) {
-        currentPosition--;
-        if (currentPosition < 0 || chain.size() == 0) {
+    public void callWriteNextFilter(IoSession session, Object message) {
+        writeChainPosition--;
+        if (writeChainPosition < 0 || chain.size() == 0) {
             // end of chain processing
             session.enqueueWriteRequest(message);
         } else {
-            chain.get(currentPosition).messageWriting(session, message, this, currentPosition);
+            chain.get(writeChainPosition).messageWriting(session, message, this);
         }
     }
 
     @Override
-    public void callReadNextFilter(IoSession session, int currentPosition, Object message) {
-        currentPosition++;
-        if (currentPosition >= chain.size()) {
+    public void callReadNextFilter(IoSession session, Object message) {
+        readChainPosition++;
+        if (readChainPosition >= chain.size()) {
             // end of chain processing
         } else {
-            chain.get(currentPosition).messageReceived(session, message, this, currentPosition);
+            chain.get(readChainPosition).messageReceived(session, message, this);
         }
     }
 
+    @Override
+    public String toString() {
+        StringBuilder bldr = new StringBuilder("IoFilterChain {");
+        int index = 0;
+        for (IoFilter filter : chain) {
+            bldr.append(index).append(":").append(filter).append(", ");
+        }
+        return bldr.append("}").toString();
+    }
 }
\ No newline at end of file

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/ReadFilterChainController.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/ReadFilterChainController.java?rev=1159886&r1=1159885&r2=1159886&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/ReadFilterChainController.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/ReadFilterChainController.java Sat Aug 20 15:44:05 2011
@@ -29,5 +29,5 @@ import org.apache.mina.api.IoSession;
  */
 public interface ReadFilterChainController {
 
-    void callReadNextFilter(IoSession session, int currentPosition, Object message);
+    void callReadNextFilter(IoSession session, Object message);
 }

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/WriteFilterChainController.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/WriteFilterChainController.java?rev=1159886&r1=1159885&r2=1159886&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/WriteFilterChainController.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/WriteFilterChainController.java Sat Aug 20 15:44:05 2011
@@ -28,5 +28,5 @@ import org.apache.mina.api.IoSession;
  *
  */
 public interface WriteFilterChainController {
-    void callWriteNextFilter(IoSession session, int currentPosition, Object message);
+    void callWriteNextFilter(IoSession session, Object message);
 }

Modified: mina/branches/3.0/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java?rev=1159886&r1=1159885&r2=1159886&view=diff
==============================================================================
--- mina/branches/3.0/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java (original)
+++ mina/branches/3.0/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java Sat Aug 20 15:44:05 2011
@@ -54,15 +54,13 @@ public class DefaultIoFilterChainTest {
         }
 
         @Override
-        public void messageReceived(IoSession session, Object message, ReadFilterChainController controller,
-                int currentPosition) {
-            controller.callReadNextFilter(session, currentPosition, message);
+        public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
+            controller.callReadNextFilter(session, message);
         }
 
         @Override
-        public void messageWriting(IoSession session, Object message, WriteFilterChainController controller,
-                int currentPosition) {
-            controller.callWriteNextFilter(session, currentPosition, message);
+        public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) {
+            controller.callWriteNextFilter(session, message);
         }
     }