Class AbstractFramedChannel<C extends AbstractFramedChannel<C,R,S>,R extends AbstractFramedStreamSourceChannel<C,R,S>,S extends AbstractFramedStreamSinkChannel<C,R,S>>
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Channel
,InterruptibleChannel
,org.xnio.channels.BoundChannel
,org.xnio.channels.CloseableChannel
,org.xnio.channels.Configurable
,org.xnio.channels.ConnectedChannel
- Direct Known Subclasses:
AjpClientChannel
,Http2Channel
,WebSocketChannel
ConnectedChannel
which can be used to send and receive Frames.
This provides a common base for framed protocols such as websockets and SPDY
- Author:
- Stuart Douglas
-
Field Summary
Fields inherited from interface org.xnio.channels.Configurable
EMPTY
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractFramedChannel
(org.xnio.StreamConnection connectedStreamChannel, ByteBufferPool bufferPool, FramePriority<C, R, S> framePriority, PooledByteBuffer readData, org.xnio.OptionMap settings) Create a newAbstractFramedChannel
8 -
Method Summary
Modifier and TypeMethodDescriptionvoid
addCloseTask
(org.xnio.ChannelListener<C> task) void
close()
Forcibly closes theAbstractFramedChannel
.protected abstract void
Method that is called when the channel is being forcibly closed, and all sub stream sink/source channels should also be forcibly closed.protected abstract R
createChannel
(FrameHeaderData frameHeaderData, PooledByteBuffer frameData) Method that creates the actual stream source channel implementation that is in use.protected IdleTimeoutConduit
createIdleTimeoutChannel
(org.xnio.StreamConnection connectedStreamChannel) void
flush()
protected void
Flushes all ready stream sink conduits to the channel.Get the buffer pool for this connection.org.xnio.ChannelListener.Setter<? extends AbstractFramedChannel>
Get the destination address of the Channel.protected FramePriority<C,
R, S> long
org.xnio.XnioIoThread
<A extends SocketAddress>
AgetLocalAddress
(Class<A> type) <T> T
getOption
(org.xnio.Option<T> option) <A extends SocketAddress>
AgetPeerAddress
(Class<A> type) protected abstract Collection<AbstractFramedStreamSourceChannel<C,
R, S>> org.xnio.ChannelListener.Setter<C>
Return theChannelListener.Setter
which will holds theChannelListener
that gets notified once a frame was received.protected org.xnio.OptionMap
Get the source address of the Channel.protected org.xnio.StreamConnection
org.xnio.XnioWorker
protected abstract void
Method that is invoked when then write side of a channel is broken.protected abstract void
Method that is invoked when the read side of the channel is broken.protected abstract boolean
Returns true if the protocol specific final frame has been received.protected abstract boolean
boolean
isOpen()
protected boolean
boolean
boolean
protected boolean
protected void
Method than is invoked when read() returns -1.protected void
markReadsBroken
(Throwable cause) Called when a source sub channel fails to fulfil its contract, and leaves the channel in an inconsistent state.protected void
markWritesBroken
(Throwable cause) Called when a sub channel fails to fulfil its contract, and leaves the channel in an inconsistent state.protected abstract FrameHeaderData
parseFrame
(ByteBuffer data) Attempts to parse an incoming frame header from the data in the buffer.protected void
queueFrame
(S channel) Queues a new frame to be sent, and attempts a flush if this is the first frame in the new frame queue.protected void
receive()
Receive method, returns null if no frame is ready.void
Resume the receive of new frames viareceive()
void
setIdleTimeout
(long timeout) <T> T
setOption
(org.xnio.Option<T> option, T value) void
setRequireExplicitFlush
(boolean requireExplicitFlush) boolean
supportsOption
(org.xnio.Option<?> option) void
Suspend the receive of new frames viareceive()
toString()
protected org.xnio.ChannelExceptionHandler<org.xnio.channels.SuspendableWriteChannel>
-
Constructor Details
-
AbstractFramedChannel
protected AbstractFramedChannel(org.xnio.StreamConnection connectedStreamChannel, ByteBufferPool bufferPool, FramePriority<C, R, S> framePriority, PooledByteBuffer readData, org.xnio.OptionMap settings) Create a newAbstractFramedChannel
8- Parameters:
connectedStreamChannel
- TheConnectedStreamChannel
over which the Frames should get send and received. Be aware that it already must be "upgraded".bufferPool
- TheByteBufferPool
which will be used to acquireByteBuffer
's from.framePriority
-settings
- The settings
-
-
Method Details
-
createIdleTimeoutChannel
protected IdleTimeoutConduit createIdleTimeoutChannel(org.xnio.StreamConnection connectedStreamChannel) -
getBufferPool
Get the buffer pool for this connection.- Returns:
- the buffer pool for this connection
-
getLocalAddress
- Specified by:
getLocalAddress
in interfaceorg.xnio.channels.BoundChannel
-
getLocalAddress
- Specified by:
getLocalAddress
in interfaceorg.xnio.channels.BoundChannel
-
getWorker
public org.xnio.XnioWorker getWorker()- Specified by:
getWorker
in interfaceorg.xnio.channels.CloseableChannel
-
getIoThread
public org.xnio.XnioIoThread getIoThread()- Specified by:
getIoThread
in interfaceorg.xnio.channels.CloseableChannel
-
supportsOption
public boolean supportsOption(org.xnio.Option<?> option) - Specified by:
supportsOption
in interfaceorg.xnio.channels.Configurable
-
getOption
- Specified by:
getOption
in interfaceorg.xnio.channels.Configurable
- Throws:
IOException
-
setOption
- Specified by:
setOption
in interfaceorg.xnio.channels.Configurable
- Throws:
IOException
-
isOpen
public boolean isOpen() -
getPeerAddress
- Specified by:
getPeerAddress
in interfaceorg.xnio.channels.ConnectedChannel
-
getPeerAddress
- Specified by:
getPeerAddress
in interfaceorg.xnio.channels.ConnectedChannel
-
getSourceAddress
Get the source address of the Channel.- Returns:
- the source address of the Channel
-
getDestinationAddress
Get the destination address of the Channel.- Returns:
- the destination address of the Channel
-
receive
Receive method, returns null if no frame is ready. Otherwise returns a channel that can be used to read the frame contents.Calling this method can also have the side effect of making additional data available to existing source channels. In general if you suspend receives or don't have some other way of calling this method then it can prevent frame channels for being fully consumed.
- Throws:
IOException
-
lastDataRead
protected void lastDataRead()Method than is invoked when read() returns -1. -
createChannel
protected abstract R createChannel(FrameHeaderData frameHeaderData, PooledByteBuffer frameData) throws IOException Method that creates the actual stream source channel implementation that is in use.- Parameters:
frameHeaderData
- The header data, as returned byparseFrame(java.nio.ByteBuffer)
frameData
- Any additional data for the frame that has already been read. This may not be the complete frame contents- Returns:
- A new stream source channel
- Throws:
IOException
-
parseFrame
Attempts to parse an incoming frame header from the data in the buffer.- Parameters:
data
- The data that has been read from the channel- Returns:
- The frame header data, or
null
if the data was incomplete - Throws:
IOException
- If the data could not be parsed.
-
recalculateHeldFrames
- Throws:
IOException
-
flushSenders
protected void flushSenders()Flushes all ready stream sink conduits to the channel.Frames will be batched up, to allow them all to be written out via a gathering write. The
framePriority
implementation will be invoked to decide which frames are eligible for sending and in what order. -
queueFrame
Queues a new frame to be sent, and attempts a flush if this is the first frame in the new frame queue.Depending on the
FramePriority
implementation in use the channel may or may not be added to the actual pending queue- Parameters:
channel
- The channel- Throws:
IOException
-
flush
public void flush() -
isLastFrameReceived
protected abstract boolean isLastFrameReceived()Returns true if the protocol specific final frame has been received.- Returns:
true
If the last frame has been received
-
isLastFrameSent
protected abstract boolean isLastFrameSent()- Returns:
true
If the last frame has been sent
-
handleBrokenSourceChannel
Method that is invoked when the read side of the channel is broken. This generally happens on a protocol error. -
handleBrokenSinkChannel
Method that is invoked when then write side of a channel is broken. This generally happens on a protocol error. -
getReceiveSetter
Return theChannelListener.Setter
which will holds theChannelListener
that gets notified once a frame was received. -
suspendReceives
public void suspendReceives()Suspend the receive of new frames viareceive()
-
resumeReceives
public void resumeReceives()Resume the receive of new frames viareceive()
-
isReceivesResumed
public boolean isReceivesResumed() -
close
Forcibly closes theAbstractFramedChannel
.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceChannel
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceorg.xnio.channels.CloseableChannel
- Specified by:
close
in interfaceInterruptibleChannel
- Throws:
IOException
-
getCloseSetter
- Specified by:
getCloseSetter
in interfaceorg.xnio.channels.BoundChannel
- Specified by:
getCloseSetter
in interfaceorg.xnio.channels.CloseableChannel
- Specified by:
getCloseSetter
in interfaceorg.xnio.channels.ConnectedChannel
-
markReadsBroken
Called when a source sub channel fails to fulfil its contract, and leaves the channel in an inconsistent state.The underlying read side will be forcibly closed.
- Parameters:
cause
- The possibly null cause
-
closeSubChannels
protected abstract void closeSubChannels()Method that is called when the channel is being forcibly closed, and all sub stream sink/source channels should also be forcibly closed. -
markWritesBroken
Called when a sub channel fails to fulfil its contract, and leaves the channel in an inconsistent state.The underlying channel will be closed, and any sub channels that have writes resumed will have their listeners notified. It is expected that these listeners will then attempt to use the channel, and their standard error handling logic will take over.
- Parameters:
cause
- The possibly null cause
-
isWritesBroken
protected boolean isWritesBroken() -
isReadsBroken
protected boolean isReadsBroken() -
getReceivers
-
setIdleTimeout
public void setIdleTimeout(long timeout) -
getIdleTimeout
public long getIdleTimeout() -
getFramePriority
-
addCloseTask
-
toString
-
getUnderlyingConnection
protected org.xnio.StreamConnection getUnderlyingConnection() -
writeExceptionHandler
protected org.xnio.ChannelExceptionHandler<org.xnio.channels.SuspendableWriteChannel> writeExceptionHandler() -
isRequireExplicitFlush
public boolean isRequireExplicitFlush() -
setRequireExplicitFlush
public void setRequireExplicitFlush(boolean requireExplicitFlush) -
getSettings
protected org.xnio.OptionMap getSettings()
-