-
Task
-
Resolution: Done
-
Major
-
4.1.0.ALPHA2
-
None
Replace readableBytes hack when clients disconnect from the channel with implementing decodeLast accordingly. See below for more details
<galderz> one final thing,
<galderz> one thing I've spotted is that when a clients disconnect
<trustin> (overriden that is)
<galderz> my ReplayingDecoder.decode is called with nothing to read
<galderz> iow, trying to read a byte throws a rather noisy ChannelClosedException or something like that
<galderz> so, to get around this,
<galderz> i created in the netty ChannelBufferAdapter that we have
<galderz> i created a method called readableBytes that computes
<galderz> buffer.writerIndex - buffer.readerIndex
<trustin> hmmm
<trustin> actually, ReplayingDecoder calls its decodeLast() method when the connection is closed.
<galderz> calling buffer,readableBytes in the ReplayingDecoder would not really tell me what's behing
<trustin> but the default implementation of decodeLast() is delegate the call to decode();.
<galderz> right, so maybe I need to override decodeLast?
<galderz> what I'm doing right now looks v hacky
<trustin> yeah if you do not want to be notified when the connection is closed in your decoder
<trustin> just override decodeLast() an do nothing there.
<galderz> right, i'll check that out as well
<trustin> The default decodeLast() implementation is reasonable with FrameDecoder, but I guess it seems to confuse the user with ReplayingDecoder
- manik has quit (Quit: manik)
<galderz> i think so, cos readableBytes gives me Integer.Max in those situations
<trustin> when disconnected
<trustin> readableBytes() will give the actual readable bytes
<galderz> yeah, when disconnected
<trustin> instead of Integer.MAX
<galderz> it was definitely not giving me 0
<galderz> it was giving something really big
<trustin> oh I see.
<trustin> Let me know if you still have to problem after overriding decodeLast()
<trustin> to -> the
<galderz> sure, thanks a million for this chat