You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ni...@apache.org on 2006/09/13 21:50:44 UTC
svn commit: r443097 -
/directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
Author: niklas
Date: Wed Sep 13 12:50:43 2006
New Revision: 443097
URL: http://svn.apache.org/viewvc?view=rev&rev=443097
Log:
Changed the javadoc example in CumulativeProtocolDecoder to be more advanced as requested in DIRMINA-199.
Modified:
directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java?view=diff&rev=443097&r1=443096&r2=443097
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java Wed Sep 13 12:50:43 2006
@@ -30,25 +30,62 @@
* decoders should cumulate received buffers to make a message complete or
* to postpone decoding until more buffers arrive.
* <p>
- * Here is an example decoder that decodes a list of integers:
+ * Here is an example decoder that decodes CRLF terminated lines into
+ * <code>Command</code> objects:
* <pre>
- * public class IntegerDecoder extends CumulativeProtocolDecoder {
+ * public class CRLFTerminatedCommandLineDecoder
+ * extends CumulativeProtocolDecoder {
*
- * public IntegerDecoder() {
- * super(4);
+ * private Command parseCommand(ByteBuffer in) {
+ * // Convert the bytes in the specified buffer to a
+ * // Command object.
+ * ...
* }
*
* protected boolean doDecode(IoSession session, ByteBuffer in,
- * ProtocolDecoderOutput out) throws ProtocolViolationException {
- * if (in.remaining() < 4) {
- * return false; // Cumulate remainder to decode later.
+ * ProtocolDecoderOutput out)
+ * throws Exception {
+ *
+ * // Remember the initial position.
+ * int start = in.position();
+ *
+ * // Now find the first CRLF in the buffer.
+ * byte previous = 0;
+ * while (in.hasRemaining()) {
+ * byte current = in.get();
+ *
+ * if (previous == '\r' && current == '\n') {
+ * // Remember the current position and limit.
+ * int position = in.position();
+ * int limit = in.limit();
+ * try {
+ * in.position(start);
+ * in.limit(position);
+ * // The bytes between in.position() and in.limit()
+ * // now contain a full CRLF terminated line.
+ * out.write(parseCommand(in.slice()));
+ * } finally {
+ * // Set the position to point right after the
+ * // detected line and set the limit to the old
+ * // one.
+ * in.position(position);
+ * in.limit(limit);
+ * }
+ * // Decoded one line; CumulativeProtocolDecoder will
+ * // call me again until I return false. So just
+ * // return true until there are no more lines in the
+ * // buffer.
+ * return true;
+ * }
+ *
+ * previous = current;
* }
*
- * out.write(new Integer(in.getInt()));
- *
- * // Decoded one integer; CumulativeProtocolDecoder will call me again,
- * // so I can decode as many integers as possible.
- * return true;
+ * // Could not find CRLF in the buffer. Reset to the initial
+ * // position to the one we recorded above.
+ * in.position(start);
+ *
+ * return false;
* }
* }
* </pre>