Introduced the automatic batch mode, akin to Jetty 8's WebSocket
implementation.
Now, if there are no more frames to process, and the previous frames
have been aggregated, FrameFlusher auto-flushes the aggregated frames.
This simplifies applications because they don't need to call flush()
explicitly.
Refactored FrameFlusher to handle aggregation of frames to support
JSR 356's batch mode.
Now FrameFlusher can aggregate frames as long as the FlushMode they
were sent is AUTO. When a frame that has FlushMode SEND arrives,
it will trigger the flush of the aggregate buffer (and eventually
also other queued frames).
A special BINARY frame is used to implement explicit flush()
invocations.
Refactored OutgoingFrames.outgoingFrame() to take an additional
parameter, FlushMode. This is in preparation for handling this new
parameter in FrameFlusher.
them in order and atomically.
Modified FragmentExtension to use a Queue and IteratingCallback to
make sure that frames are iteratively fragmented.
The creation of the next fragment only happens when there is a callback
from the next outgoing layer.
them in order and atomically.
Refactored PerMessageDeflateExtension and DeflateFrameExtension
introducing superclass CompressExtension that factors in common
functionalities.
them in order and atomically.
Modified DeflateFrameExtension to use a Queue and IteratingCallback to
make sure that frames are iteratively compressed in chunks.
The compression of the next chunk only happen when there is a callback
from the next outgoing layer.
Fixed by having the Parser release the payload ByteBuffer.
Also reworked WebSocketFrame.reset() method, and made sure
that outgoing frames also don't leak ByteBuffers.
+ Expanding testing of PongMessage
+ Ensuring that .addMessage(MessageHandler.Whole<PongMessage>) works
+ Ensuring that ping or pong messages all goto assigned message
handler for PongMessage, for both extends Endpoint and
annotated @OnMessage
Renamed Next enum to Action, and renamed some constant of the State
enum to avoid confusion with the Action enum.
Simplified succeeded() and failed(Throwable) code,
covering also cases not covered before.
Fixed case SCHEDULED in succeeded() that was returning in case the
compareAndSet failed.
Fixed race in perform(), where 2 threads may execute concurrently
after having returned from process().
Vastly improved javadocs and comments.
+ Reworked extension negotiation to be more consistent with the changes
to the spec that Chrome 32 are introducing. Namely that first
extension to claim RSV bit wins, all other conflicting extensions are
ignored.