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/10/05 17:47:44 UTC

svn commit: r1179276 - in /mina/trunk/core/src/main/java/org/apache/mina/filter/codec: ProtocolCodecFilter.java ProtocolDecoder.java ProtocolEncoder.java

Author: elecharny
Date: Wed Oct  5 15:47:43 2011
New Revision: 1179276

URL: http://svn.apache.org/viewvc?rev=1179276&view=rev
Log:
o Added the getDecoder() method
o Simplified the message processing
o Encoder and decoder now take a Controller as a parameter to be able to call the next filter

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=1179276&r1=1179275&r2=1179276&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Wed Oct  5 15:47:43 2011
@@ -175,6 +175,17 @@ public class ProtocolCodecFilter impleme
         return (ProtocolEncoder) session.getAttribute(ENCODER);
     }
 
+    
+    /**
+     * Get the decoder instance from a given session.
+     *
+     * @param session The associated session we will get the decoder from
+     * @return The decoder instance, if any
+     */
+    public ProtocolDecoder getDecoder(IoSession session) {
+        return (ProtocolDecoder) session.getAttribute(DECODER);
+    }
+
     /**
      * Process the incoming message, calling the session decoder. As the incoming
      * buffer might contains more than one messages, we have to loop until the decoder
@@ -198,7 +209,7 @@ public class ProtocolCodecFilter impleme
         }
 
         ByteBuffer in = (ByteBuffer) message;
-        ProtocolDecoder decoder = session.getAttribute(DECODER);
+        ProtocolDecoder decoder = getDecoder( session );
         
         // Loop until we don't have anymore byte in the buffer,
         // or until the decoder throws an unrecoverable exception or 
@@ -206,14 +217,7 @@ public class ProtocolCodecFilter impleme
         // data in the buffer
         while (in.hasRemaining()) {
             // Call the decoder with the read bytes
-            Object decoded = decoder.decode(session, in);
-            
-            // Finish decoding if no exception was thrown.
-            if (decoded != null) {
-                controller.callReadNextFilter(session, decoded);
-            } else {
-                break;
-            }
+            decoder.decode(session, in, controller);
         }
     }
 
@@ -221,9 +225,7 @@ public class ProtocolCodecFilter impleme
     public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) {
         ProtocolEncoder encoder = session.getAttribute(ENCODER);
         
-        Object encoded = encoder.encode(session, message);
-        
-        controller.callWriteNextFilter(session, encoded);
+        encoder.encode(session, message, controller);
     }
 
     @Override

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java?rev=1179276&r1=1179275&r2=1179276&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolDecoder.java Wed Oct  5 15:47:43 2011
@@ -22,6 +22,7 @@ package org.apache.mina.filter.codec;
 import java.nio.ByteBuffer;
 
 import org.apache.mina.api.IoSession;
+import org.apache.mina.filterchain.ReadFilterChainController;
 
 /**
  * Decodes binary or protocol-specific data into higher-level message objects.
@@ -47,7 +48,7 @@ public interface ProtocolDecoder {
      *
      * @throws Exception if the read data violated protocol specification
      */
-    Object decode(IoSession session, ByteBuffer in);// throws Exception;
+    Object decode(IoSession session, ByteBuffer in, ReadFilterChainController controller);// throws Exception;
 
     /**
      * Invoked when the specified <tt>session</tt> is closed.  This method is useful

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java?rev=1179276&r1=1179275&r2=1179276&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolEncoder.java Wed Oct  5 15:47:43 2011
@@ -20,6 +20,7 @@
 package org.apache.mina.filter.codec;
 
 import org.apache.mina.api.IoSession;
+import org.apache.mina.filterchain.WriteFilterChainController;
 
 /**
  * Encodes higher-level message objects into binary or protocol-specific data.
@@ -47,7 +48,7 @@ public interface ProtocolEncoder {
      *
      * @throws Exception if the message violated protocol specification
      */
-    Object encode(IoSession session, Object message); // throws Exception;
+    Object encode(IoSession session, Object message, WriteFilterChainController controller); // throws Exception;
 
     /**
      * Releases all resources related with this encoder.