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.