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
ConstructorsModifierConstructorDescriptionprotectedAbstractFramedChannel(org.xnio.StreamConnection connectedStreamChannel, ByteBufferPool bufferPool, FramePriority<C, R, S> framePriority, PooledByteBuffer readData, org.xnio.OptionMap settings) Create a newAbstractFramedChannel8 -
Method Summary
Modifier and TypeMethodDescriptionvoidaddCloseTask(org.xnio.ChannelListener<C> task) voidclose()Forcibly closes theAbstractFramedChannel.protected abstract voidMethod that is called when the channel is being forcibly closed, and all sub stream sink/source channels should also be forcibly closed.protected abstract RcreateChannel(FrameHeaderData frameHeaderData, PooledByteBuffer frameData) Method that creates the actual stream source channel implementation that is in use.protected IdleTimeoutConduitcreateIdleTimeoutChannel(org.xnio.StreamConnection connectedStreamChannel) voidflush()protected voidFlushes 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> longorg.xnio.XnioIoThread<A extends SocketAddress>
AgetLocalAddress(Class<A> type) <T> TgetOption(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.Setterwhich will holds theChannelListenerthat gets notified once a frame was received.protected org.xnio.OptionMapGet the source address of the Channel.protected org.xnio.StreamConnectionorg.xnio.XnioWorkerprotected abstract voidMethod that is invoked when then write side of a channel is broken.protected abstract voidMethod that is invoked when the read side of the channel is broken.protected abstract booleanReturns true if the protocol specific final frame has been received.protected abstract booleanbooleanisOpen()protected booleanbooleanbooleanprotected booleanprotected voidMethod than is invoked when read() returns -1.protected voidmarkReadsBroken(Throwable cause) Called when a source sub channel fails to fulfil its contract, and leaves the channel in an inconsistent state.protected voidmarkWritesBroken(Throwable cause) Called when a sub channel fails to fulfil its contract, and leaves the channel in an inconsistent state.protected abstract FrameHeaderDataparseFrame(ByteBuffer data) Attempts to parse an incoming frame header from the data in the buffer.protected voidqueueFrame(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 voidreceive()Receive method, returns null if no frame is ready.voidResume the receive of new frames viareceive()voidsetIdleTimeout(long timeout) <T> TsetOption(org.xnio.Option<T> option, T value) voidsetRequireExplicitFlush(boolean requireExplicitFlush) booleansupportsOption(org.xnio.Option<?> option) voidSuspend 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 newAbstractFramedChannel8- Parameters:
connectedStreamChannel- TheConnectedStreamChannelover which the Frames should get send and received. Be aware that it already must be "upgraded".bufferPool- TheByteBufferPoolwhich 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:
getLocalAddressin interfaceorg.xnio.channels.BoundChannel
-
getLocalAddress
- Specified by:
getLocalAddressin interfaceorg.xnio.channels.BoundChannel
-
getWorker
public org.xnio.XnioWorker getWorker()- Specified by:
getWorkerin interfaceorg.xnio.channels.CloseableChannel
-
getIoThread
public org.xnio.XnioIoThread getIoThread()- Specified by:
getIoThreadin interfaceorg.xnio.channels.CloseableChannel
-
supportsOption
public boolean supportsOption(org.xnio.Option<?> option) - Specified by:
supportsOptionin interfaceorg.xnio.channels.Configurable
-
getOption
- Specified by:
getOptionin interfaceorg.xnio.channels.Configurable- Throws:
IOException
-
setOption
- Specified by:
setOptionin interfaceorg.xnio.channels.Configurable- Throws:
IOException
-
isOpen
public boolean isOpen() -
getPeerAddress
- Specified by:
getPeerAddressin interfaceorg.xnio.channels.ConnectedChannel
-
getPeerAddress
- Specified by:
getPeerAddressin 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
nullif 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
framePriorityimplementation 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
FramePriorityimplementation 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:
trueIf the last frame has been received
-
isLastFrameSent
protected abstract boolean isLastFrameSent()- Returns:
trueIf 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.Setterwhich will holds theChannelListenerthat 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:
closein interfaceAutoCloseable- Specified by:
closein interfaceChannel- Specified by:
closein interfaceCloseable- Specified by:
closein interfaceorg.xnio.channels.CloseableChannel- Specified by:
closein interfaceInterruptibleChannel- Throws:
IOException
-
getCloseSetter
- Specified by:
getCloseSetterin interfaceorg.xnio.channels.BoundChannel- Specified by:
getCloseSetterin interfaceorg.xnio.channels.CloseableChannel- Specified by:
getCloseSetterin 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()
-