Yongxing Wang wrote:
I wrote a simple unit test case where one single buffer contains two messages, 
using the DummySession. After calling decode, it delivers me two messages:

  IoBuffer in = IoBuffer.wrap(bytesData); <= contains two encoded msgs
  decoder.decode(session, in, session.getDecoderOutput());
  assertEquals(2, session.getDecoderOutputQueue().size());
Also, looking at the CumulativeProtocolDecoder(which is one I am using),

  for (;;) {
     int oldPos = buf.position();
     boolean decoded = doDecode(session, buf, out);
     if (decoded) {
         if (buf.position() == oldPos) {
            throw new IllegalStateException(
                    "doDecode() can't return true when buffer is not 
consumed.");
         }

       if (!buf.hasRemaining()) {
          break;
       }
     } else {
         break;
     }
  }

doDecode will be called again if there are any remaining bytes in the event of successfully decoding one message.... If I am not terribly wrong, David, your algorithm is fine.

Thanks a lot for having checked !

--
--
cordialement, regards,
Emmanuel Lécharny
www.iktek.com
directory.apache.org


Reply via email to