Class AbstractFramedStreamSinkConduit

java.lang.Object
org.xnio.conduits.AbstractConduit<D>
org.xnio.conduits.AbstractSinkConduit<D>
org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
io.undertow.conduits.AbstractFramedStreamSinkConduit
All Implemented Interfaces:
org.xnio.conduits.Conduit, org.xnio.conduits.SinkConduit, org.xnio.conduits.StreamSinkConduit

public class AbstractFramedStreamSinkConduit extends org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
Utility class to ease the implementation of framed protocols. This call provides a queue of frames, and a callback that can be invoked when a frame event occurs.

When a write takes place all frames are attempted to be written out at once via a gathering write. Frames can be queued via queueFrame(io.undertow.conduits.AbstractFramedStreamSinkConduit.FrameCallBack, java.nio.ByteBuffer...).

Author:
Stuart Douglas
  • Constructor Details

    • AbstractFramedStreamSinkConduit

      protected AbstractFramedStreamSinkConduit(org.xnio.conduits.StreamSinkConduit next)
      Construct a new instance.
      Parameters:
      next - the delegate conduit to set
  • Method Details

    • queueFrame

      protected void queueFrame(AbstractFramedStreamSinkConduit.FrameCallBack callback, ByteBuffer... data)
      Queues a frame for sending.
      Parameters:
      callback -
      data -
    • transferFrom

      public long transferFrom(FileChannel src, long position, long count) throws IOException
      Specified by:
      transferFrom in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      transferFrom in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • transferFrom

      public long transferFrom(org.xnio.channels.StreamSourceChannel source, long count, ByteBuffer throughBuffer) throws IOException
      Specified by:
      transferFrom in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      transferFrom in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • write

      public int write(ByteBuffer src) throws IOException
      Specified by:
      write in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      write in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • write

      public long write(ByteBuffer[] srcs, int offs, int len) throws IOException
      Specified by:
      write in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      write in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • writeFinal

      public int writeFinal(ByteBuffer src) throws IOException
      Specified by:
      writeFinal in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      writeFinal in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • writeFinal

      public long writeFinal(ByteBuffer[] srcs, int offs, int len) throws IOException
      Specified by:
      writeFinal in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      writeFinal in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • queuedDataLength

      protected long queuedDataLength()
    • terminateWrites

      public void terminateWrites() throws IOException
      Specified by:
      terminateWrites in interface org.xnio.conduits.SinkConduit
      Overrides:
      terminateWrites in class org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • doTerminateWrites

      protected void doTerminateWrites() throws IOException
      Throws:
      IOException
    • flushQueuedData

      protected boolean flushQueuedData() throws IOException
      Throws:
      IOException
    • truncateWrites

      public void truncateWrites() throws IOException
      Specified by:
      truncateWrites in interface org.xnio.conduits.SinkConduit
      Overrides:
      truncateWrites in class org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • isWritesTerminated

      protected boolean isWritesTerminated()
    • queueCloseFrames

      protected void queueCloseFrames()
    • finished

      protected void finished()