- All Superinterfaces:
AutoCloseable
,Channel
,Closeable
,CloseableChannel
,Configurable
,InterruptibleChannel
- All Known Subinterfaces:
BoundMultipointMessageChannel
,ConnectedMessageChannel
,ConnectedSslStreamChannel
,ConnectedStreamChannel
,MessageChannel
,MulticastMessageChannel
,MultipointMessageChannel
,StreamChannel
,StreamSinkChannel
,SuspendableChannel
,WritableMessageChannel
,WritableMultipointMessageChannel
- All Known Implementing Classes:
AssembledConnectedMessageChannel
,AssembledConnectedSslStreamChannel
,AssembledConnectedStreamChannel
,AssembledMessageChannel
,AssembledStreamChannel
,ConduitStreamSinkChannel
,ConduitWritableMessageChannel
,FixedLengthStreamSinkChannel
,FramedMessageChannel
,NullStreamSinkChannel
,SplitStreamSinkChannel
,TranslatingSuspendableChannel
A suspendable writable channel. This type of channel is associated with a listener which can suspend and resume
writes as needed.
-
Field Summary
Fields inherited from interface org.xnio.channels.Configurable
EMPTY
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Block until this channel becomes writable again.void
awaitWritable
(long time, TimeUnit timeUnit) Block until this channel becomes writable again, or until the timeout expires.void
close()
Close this channel.boolean
flush()
Flush any waiting partial send or write.ChannelListener.Setter<? extends SuspendableWriteChannel>
Get the setter which can be used to change the close listener for this channel.ChannelListener.Setter<? extends SuspendableWriteChannel>
Get the setter which can be used to change the write listener for this channel.Deprecated.boolean
isOpen()
Determine whether this channel is open.boolean
Determine whether writes are resumed.void
Resume writes on this channel.void
Indicate that writing is complete for this channel.void
Suspend further write notifications on this channel.void
Deprecated.Users should instead submitRunnable
tasks to the channel thread when this functionality is needed.Methods inherited from interface org.xnio.channels.CloseableChannel
getIoThread, getWorker
Methods inherited from interface org.xnio.channels.Configurable
getOption, setOption, supportsOption
-
Method Details
-
suspendWrites
void suspendWrites()Suspend further write notifications on this channel. -
resumeWrites
void resumeWrites()Resume writes on this channel. The write listener will be called as soon as the channel becomes writable. -
isWriteResumed
boolean isWriteResumed()Determine whether writes are resumed.- Returns:
true
if writes are resumed,false
if writes are suspended
-
wakeupWrites
Deprecated.Users should instead submitRunnable
tasks to the channel thread when this functionality is needed.Resume writes
on this channel, and force the write listener to be triggered even if the channel isn't actually writable. -
shutdownWrites
Indicate that writing is complete for this channel. Further attempts to write data to this channel after this method is invoked will result in an exception. If this method was already called, calling this method again will have no additional effect. After this method is called, any remaining data still must be flushed out via theflush()
method; once this is done, if the read side of the channel was shut down, the channel will automatically close.- Throws:
IOException
- if an I/O error occurs
-
awaitWritable
Block until this channel becomes writable again. This method may return spuriously before the channel becomes writable.- Throws:
InterruptedIOException
- if the operation is interrupted; the thread's interrupt flag will be set as wellIOException
- if an I/O error occurs- Since:
- 1.2
-
awaitWritable
Block until this channel becomes writable again, or until the timeout expires. This method may return spuriously before the channel becomes writable or the timeout expires.- Parameters:
time
- the time to waittimeUnit
- the time unit- Throws:
InterruptedIOException
- if the operation is interrupted; the thread's interrupt flag will be set as wellIOException
- if an I/O error occurs- Since:
- 1.2
-
getWriteThread
Deprecated.TheCloseableChannel.getIoThread()
method should be used instead.Get the write thread for this channel.- Returns:
- the thread, or
null
if none is configured or available
-
getWriteSetter
ChannelListener.Setter<? extends SuspendableWriteChannel> getWriteSetter()Get the setter which can be used to change the write listener for this channel.- Returns:
- the setter
- Since:
- 2.0
-
getCloseSetter
ChannelListener.Setter<? extends SuspendableWriteChannel> getCloseSetter()Get the setter which can be used to change the close listener for this channel. If the channel is already closed, then the listener will not be called.- Specified by:
getCloseSetter
in interfaceCloseableChannel
- Returns:
- the setter
-
flush
Flush any waiting partial send or write. If there is no data to flush, or if the flush completed successfully, this method will returntrue
. If there is data to flush which cannot be immediately written, this method will returnfalse
. If this method returnstrue
aftershutdownWrites()
was called on this channel, the write listener will no longer be invoked on this channel. If this is case and additionally this is a write-only channel or the read side was previously shut down, then the channel will automatically be closed.- Returns:
true
if the message was flushed, orfalse
if the result would block- Throws:
IOException
- if an I/O error occurs
-
isOpen
boolean isOpen()Determine whether this channel is open. This method will returnfalse
if all directions are shut down, even if there is unflushed write data pending. -
close
Close this channel. If data has been written but not flushed, that data may be discarded, depending on the channel implementation. When a channel is closed, its close listener is invoked. Invoking this method more than once has no additional effect.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceChannel
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceCloseableChannel
- Specified by:
close
in interfaceInterruptibleChannel
- Throws:
IOException
- if the close failed
-
CloseableChannel.getIoThread()
method should be used instead.