public abstract class WriteFlusher
extends java.lang.Object
completeWrite
()
protected java.nio.ByteBuffer[]
flush
(java.nio.ByteBuffer[] buffers)
Flushes the buffers iteratively until no progress is made.
Invocable.InvocationType
getCallbackInvocationType
()
boolean
isPending
()
onClose
()
boolean
onFail
(java.lang.Throwable cause)
Notify the flusher of a failure
protected abstract void
onIncompleteFlush
()
Abstract call to be implemented by specific WriteFlushers.
java.lang.String
toStateString
()
java.lang.String
toString
()
write
(
Callback
callback,
java.nio.ByteBuffer... buffers)
Tries to switch state to WRITING.
onIncompleteFlush
protected abstract void onIncompleteFlush()
public void write(Callback callback,
java.nio.ByteBuffer... buffers)
throws java.nio.channels.WritePendingException
Tries to switch state to WRITING. If successful it writes the given buffers to the EndPoint. If state transition
fails it will fail the callback and leave the WriteFlusher in a terminal FAILED state.
If not all buffers can be written in one go it creates a new
PendingState
object to preserve the state
and then calls
onIncompleteFlush()
. The remaining buffers will be written in
completeWrite()
.
If all buffers have been written it calls callback.complete().
Parameters:
callback
- the callback to call on either failed or complete
buffers
- the buffers to flush to the endpoint
Throws:
java.nio.channels.WritePendingException
- if unable to write due to prior pending write
completeWrite
public void completeWrite()
Complete a write that has not completed and that called
onIncompleteFlush()
to request a call to this
method when a call to
EndPoint.flush(ByteBuffer...)
is likely to be able to progress.
It tries to switch from PENDING to COMPLETING. If state transition fails, then it does nothing as the callback
should have been already failed. That's because the only way to switch from PENDING outside this method is
onFail(Throwable)
or
onClose()
flush
protected java.nio.ByteBuffer[] flush(java.nio.ByteBuffer[] buffers)
throws java.io.IOException
Flushes the buffers iteratively until no progress is made.
Parameters:
buffers
- The buffers to flush
Returns:
The unflushed buffers, or null if all flushed
Throws:
java.io.IOException
- if unable to flush