- java.lang.Object
-
- org.xnio.conduits.AbstractConduit<D>
-
- org.xnio.conduits.AbstractSinkConduit<StreamSinkConduit>
-
- org.xnio.conduits.FramingMessageSinkConduit
-
- All Implemented Interfaces:
Conduit
,MessageSinkConduit
,SinkConduit
public final class FramingMessageSinkConduit extends AbstractSinkConduit<StreamSinkConduit> implements MessageSinkConduit
A message sink conduit which implements a simple message framing protocol over a stream conduit.- Author:
- David M. Lloyd
-
-
Field Summary
-
Fields inherited from class org.xnio.conduits.AbstractConduit
next
-
-
Constructor Summary
Constructors Constructor Description FramingMessageSinkConduit(StreamSinkConduit next, boolean longLengths, Pooled<java.nio.ByteBuffer> transmitBuffer)
Construct a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
flush()
Flush out any unwritten, buffered output.boolean
send(java.nio.ByteBuffer src)
Send a complete message.boolean
send(java.nio.ByteBuffer[] srcs, int offs, int len)
Send a complete message.boolean
sendFinal(java.nio.ByteBuffer src)
Send a complete message.boolean
sendFinal(java.nio.ByteBuffer[] srcs, int offs, int len)
Send a complete message.void
terminateWrites()
Signal that no more write data is forthcoming.void
truncateWrites()
Terminate writes and discard any outstanding write data.-
Methods inherited from class org.xnio.conduits.AbstractSinkConduit
awaitWritable, awaitWritable, getWriteThread, isWriteResumed, isWriteShutdown, resumeWrites, setWriteReadyHandler, suspendWrites, wakeupWrites
-
Methods inherited from class org.xnio.conduits.AbstractConduit
getWorker
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.xnio.conduits.SinkConduit
awaitWritable, awaitWritable, getWriteThread, isWriteResumed, isWriteShutdown, resumeWrites, setWriteReadyHandler, suspendWrites, wakeupWrites
-
-
-
-
Constructor Detail
-
FramingMessageSinkConduit
public FramingMessageSinkConduit(StreamSinkConduit next, boolean longLengths, Pooled<java.nio.ByteBuffer> transmitBuffer)
Construct a new instance.- Parameters:
next
- the delegate conduit to setlongLengths
-true
to use 4-byte lengths,false
to use 2-byte lengthstransmitBuffer
- the transmit buffer to use
-
-
Method Detail
-
send
public boolean send(java.nio.ByteBuffer src) throws java.io.IOException
Description copied from interface:MessageSinkConduit
Send a complete message.- Specified by:
send
in interfaceMessageSinkConduit
- Parameters:
src
- the message to send- Returns:
- the result of the send operation;
true
if the message was sent, orfalse
if it would block - Throws:
java.io.IOException
- if an I/O error occurs
-
send
public boolean send(java.nio.ByteBuffer[] srcs, int offs, int len) throws java.io.IOException
Description copied from interface:MessageSinkConduit
Send a complete message.- Specified by:
send
in interfaceMessageSinkConduit
- Parameters:
srcs
- the buffers holding the message to sendoffs
- the offset into the buffer array of the first bufferlen
- the number of buffers that contain data to send- Returns:
- the result of the send operation;
true
if the message was sent, orfalse
if it would block - Throws:
java.io.IOException
- if an I/O error occurs
-
sendFinal
public boolean sendFinal(java.nio.ByteBuffer src) throws java.io.IOException
Description copied from interface:MessageSinkConduit
Send a complete message. If the message is successfully sent then the sink will have its writes terminated.- Specified by:
sendFinal
in interfaceMessageSinkConduit
- Parameters:
src
- the message to send- Returns:
- the result of the send operation;
true
if the message was sent, orfalse
if it would block - Throws:
java.io.IOException
- if an I/O error occurs
-
sendFinal
public boolean sendFinal(java.nio.ByteBuffer[] srcs, int offs, int len) throws java.io.IOException
Description copied from interface:MessageSinkConduit
Send a complete message. If the message is successfully sent then the sink will have its writes terminated.- Specified by:
sendFinal
in interfaceMessageSinkConduit
- Parameters:
srcs
- the buffers holding the message to sendoffs
- the offset into the buffer array of the first bufferlen
- the number of buffers that contain data to send- Returns:
- the result of the send operation;
true
if the message was sent, orfalse
if it would block - Throws:
java.io.IOException
- if an I/O error occurs
-
flush
public boolean flush() throws java.io.IOException
Description copied from interface:SinkConduit
Flush out any unwritten, buffered output.- Specified by:
flush
in interfaceSinkConduit
- Overrides:
flush
in classAbstractSinkConduit<StreamSinkConduit>
- Returns:
true
if everything is flushed,false
otherwise- Throws:
java.io.IOException
- if flush fails
-
terminateWrites
public void terminateWrites() throws java.io.IOException
Description copied from interface:SinkConduit
Signal that no more write data is forthcoming. The conduit must beSinkConduit.flush()
ed before it is considered to be shut down.- Specified by:
terminateWrites
in interfaceSinkConduit
- Overrides:
terminateWrites
in classAbstractSinkConduit<StreamSinkConduit>
- Throws:
java.io.IOException
-
truncateWrites
public void truncateWrites() throws java.io.IOException
Description copied from interface:SinkConduit
Terminate writes and discard any outstanding write data. The conduit is terminated and flushed regardless of the outcome of this method.- Specified by:
truncateWrites
in interfaceSinkConduit
- Overrides:
truncateWrites
in classAbstractSinkConduit<StreamSinkConduit>
- Throws:
java.io.IOException
- if channel termination failed for some reason
-
-