java.lang.Object
org.glassfish.grizzly.AbstractWriter<SocketAddress>
org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter
- All Implemented Interfaces:
AsyncQueue
,AsyncQueueWriter<SocketAddress>
,Writer<SocketAddress>
- Direct Known Subclasses:
TCPNIOAsyncQueueWriter
,UDPNIOAsyncQueueWriter
public abstract class AbstractNIOAsyncQueueWriter
extends AbstractWriter<SocketAddress>
implements AsyncQueueWriter<SocketAddress>
The
AsyncQueueWriter
implementation, based on the Java NIO- Author:
- Alexey Stashok, Ryan Lubke, Gustav Trede
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.glassfish.grizzly.asyncqueue.AsyncQueue
AsyncQueue.AsyncResult
Nested classes/interfaces inherited from interface org.glassfish.grizzly.Writer
Writer.Reentrant
-
Field Summary
Fields inherited from interface org.glassfish.grizzly.asyncqueue.AsyncQueue
EXPECTING_MORE_OPTION
Fields inherited from interface org.glassfish.grizzly.asyncqueue.AsyncQueueWriter
AUTO_SIZE, UNLIMITED_SIZE
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected AsyncWriteQueueRecord
aggregate
(TaskQueue<AsyncWriteQueueRecord> connectionQueue) Aggregates records in a queue to be written as one chunk.boolean
canWrite
(Connection<SocketAddress> connection) Returntrue
if the connection has not exceeded it's maximum size in bytes of pending writes, otherwisefalse
.boolean
canWrite
(Connection<SocketAddress> connection, int size) Deprecated.final void
close()
Close AsyncQueueProcessor and release associated resourcesprotected AsyncWriteQueueRecord
createRecord
(Connection connection, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, SocketAddress dstAddress, PushBackHandler pushBackHandler, boolean isUncountable) int
boolean
Returns true, if async write queue is allowed to write buffer directly during write(...) method call, w/o adding buffer to the queue, or false otherwise.final boolean
isReady
(Connection connection) Checks whether there is ready data inAsyncQueue
, associated with theConnection
.void
notifyWritePossible
(Connection<SocketAddress> connection, WriteHandler writeHandler) RegistersWriteHandler
, which will be notified ones at least one byte can be written.void
notifyWritePossible
(Connection<SocketAddress> connection, WriteHandler writeHandler, int size) Deprecated.void
onClose
(Connection connection) Callback method, which is called, whenConnection
has been closed, to let processor release a connection associated resources.protected abstract void
onReadyToWrite
(NIOConnection connection) protected static void
onWriteFailure
(Connection connection, AsyncWriteQueueRecord failedRecord, Throwable e) processAsync
(Context context) Callback method, which is called async.void
setAllowDirectWrite
(boolean isAllowDirectWrite) Set true, if async write queue is allowed to write buffer directly during write(...) method call, w/o adding buffer to the queue, or false otherwise.void
setMaxPendingBytesPerConnection
(int maxPendingBytes) Configures the maximum number of bytes pending to be written for a particularConnection
.void
write
(Connection<SocketAddress> connection, SocketAddress dstAddress, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, MessageCloner<WritableMessage> cloner) Method writes theWritableMessage
to the specific address.void
write
(Connection<SocketAddress> connection, SocketAddress dstAddress, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, PushBackHandler pushBackHandler) Deprecated.void
write
(Connection<SocketAddress> connection, SocketAddress dstAddress, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, PushBackHandler pushBackHandler, MessageCloner<WritableMessage> cloner) Deprecated.protected abstract RecordWriteResult
write0
(NIOConnection connection, AsyncWriteQueueRecord queueRecord) Methods inherited from class org.glassfish.grizzly.AbstractWriter
write, write, write, write
-
Field Details
-
transport
-
maxPendingBytes
protected volatile int maxPendingBytes -
maxWriteReentrants
protected volatile int maxWriteReentrants
-
-
Constructor Details
-
AbstractNIOAsyncQueueWriter
-
-
Method Details
-
canWrite
Deprecated.- Specified by:
canWrite
in interfaceAsyncQueueWriter<SocketAddress>
- Parameters:
connection
- theConnection
to test whether or not the specified number of bytes can be written to.size
- number of bytes to write.- Returns:
true
if the queue has not exceeded it's maximum size in bytes of pending writes, otherwisefalse
-
canWrite
Description copied from interface:Writer
Returntrue
if the connection has not exceeded it's maximum size in bytes of pending writes, otherwisefalse
.- Specified by:
canWrite
in interfaceWriter<SocketAddress>
- Parameters:
connection
- theConnection
to test whether or not the specified number of bytes can be written to.- Returns:
true
if the connection has not exceeded it's maximum size in bytes of pending writes, otherwisefalse
-
notifyWritePossible
@Deprecated public void notifyWritePossible(Connection<SocketAddress> connection, WriteHandler writeHandler, int size) Deprecated.RegistersWriteHandler
, which will be notified ones theConnection
is able to accept more bytes to be written. Note: using this method from different threads simultaneously may lead to quick situation changes, so at timeWriteHandler
is called - the queue may become busy again.- Specified by:
notifyWritePossible
in interfaceAsyncQueueWriter<SocketAddress>
- Parameters:
connection
-Connection
writeHandler
-WriteHandler
to be notified.size
- number of bytes queue has to be able to accept before notifyingWriteHandler
.
-
notifyWritePossible
Description copied from interface:Writer
RegistersWriteHandler
, which will be notified ones at least one byte can be written. This method call is equivalent to call notifyWritePossible(connection, writeHandler, 1); Note: using this method from different threads simultaneously may lead to quick situation changes, so at timeWriteHandler
is called - the queue may become busy again.- Specified by:
notifyWritePossible
in interfaceWriter<SocketAddress>
- Parameters:
connection
-Connection
writeHandler
-WriteHandler
to be notified.
-
setMaxPendingBytesPerConnection
public void setMaxPendingBytesPerConnection(int maxPendingBytes) Configures the maximum number of bytes pending to be written for a particularConnection
.- Specified by:
setMaxPendingBytesPerConnection
in interfaceAsyncQueueWriter<SocketAddress>
- Parameters:
maxPendingBytes
- maximum number of bytes that may be pending to be written to a particularConnection
.
-
getMaxPendingBytesPerConnection
public int getMaxPendingBytesPerConnection()- Specified by:
getMaxPendingBytesPerConnection
in interfaceAsyncQueueWriter<SocketAddress>
- Returns:
- the maximum number of bytes that may be pending to be written to a particular
Connection
. By default, this will be four times the size of theSocket
send buffer size.
-
isAllowDirectWrite
public boolean isAllowDirectWrite()Returns true, if async write queue is allowed to write buffer directly during write(...) method call, w/o adding buffer to the queue, or false otherwise.- Specified by:
isAllowDirectWrite
in interfaceAsyncQueueWriter<SocketAddress>
- Returns:
- true, if async write queue is allowed to write buffer directly during write(...) method call, w/o adding buffer to the queue, or false otherwise.
-
setAllowDirectWrite
public void setAllowDirectWrite(boolean isAllowDirectWrite) Set true, if async write queue is allowed to write buffer directly during write(...) method call, w/o adding buffer to the queue, or false otherwise.- Specified by:
setAllowDirectWrite
in interfaceAsyncQueueWriter<SocketAddress>
- Parameters:
isAllowDirectWrite
- true, if async write queue is allowed to write buffer directly during write(...) method call, w/o adding buffer to the queue, or false otherwise.
-
write
public void write(Connection<SocketAddress> connection, SocketAddress dstAddress, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, MessageCloner<WritableMessage> cloner) Description copied from interface:Writer
Method writes theWritableMessage
to the specific address.- Specified by:
write
in interfaceWriter<SocketAddress>
- Parameters:
connection
- theConnection
to write todstAddress
- the destination address theWritableMessage
will be sent tomessage
- theWritableMessage
, from which the data will be writtencompletionHandler
-CompletionHandler
, which will get notified, when write will be completedcloner
- theMessageCloner
, which will be able to clone the message in case it can't be completely written in the current thread.
-
write
@Deprecated public void write(Connection<SocketAddress> connection, SocketAddress dstAddress, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, PushBackHandler pushBackHandler) Deprecated.Description copied from interface:Writer
Method writes theWritableMessage
to the specific address.- Specified by:
write
in interfaceWriter<SocketAddress>
- Parameters:
connection
- theConnection
to write todstAddress
- the destination address theWritableMessage
will be sent tomessage
- theWritableMessage
, from which the data will be writtencompletionHandler
-CompletionHandler
, which will get notified, when write will be completedpushBackHandler
-PushBackHandler
, which will be notified if message was accepted by transport write queue or refused
-
write
@Deprecated public void write(Connection<SocketAddress> connection, SocketAddress dstAddress, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, PushBackHandler pushBackHandler, MessageCloner<WritableMessage> cloner) Deprecated.Method writes theBuffer
to the specific address.- Specified by:
write
in interfaceAsyncQueueWriter<SocketAddress>
- Parameters:
connection
- theConnection
to write todstAddress
- the destination address theWritableMessage
will be sent tomessage
- theWritableMessage
, from which the data will be writtencompletionHandler
-CompletionHandler
, which will get notified, when write will be completedpushBackHandler
-PushBackHandler
, which will be notified if message was accepted by transport write queue or refusedcloner
-MessageCloner
, which will be invoked by AsyncQueueWriter, if message could not be written to a channel directly and has to be put on a asynchronous queue
-
processAsync
Callback method, which is called async. to process readyAsyncQueue
, which are associated with the givenConnection
- Specified by:
processAsync
in interfaceAsyncQueue
- Parameters:
context
-Context
- Returns:
AsyncQueue.AsyncResult
, depending on async queue status.
-
createRecord
protected AsyncWriteQueueRecord createRecord(Connection connection, WritableMessage message, CompletionHandler<WriteResult<WritableMessage, SocketAddress>> completionHandler, SocketAddress dstAddress, PushBackHandler pushBackHandler, boolean isUncountable) -
isReady
Checks whether there is ready data inAsyncQueue
, associated with theConnection
.- Specified by:
isReady
in interfaceAsyncQueue
- Parameters:
connection
-Connection
- Returns:
- true, if there is ready data, or false otherwise.
-
onClose
Callback method, which is called, whenConnection
has been closed, to let processor release a connection associated resources.- Specified by:
onClose
in interfaceAsyncQueue
- Parameters:
connection
-Connection
-
close
public final void close()Close AsyncQueueProcessor and release associated resources- Specified by:
close
in interfaceAsyncQueue
-
onWriteFailure
protected static void onWriteFailure(Connection connection, AsyncWriteQueueRecord failedRecord, Throwable e) -
write0
protected abstract RecordWriteResult write0(NIOConnection connection, AsyncWriteQueueRecord queueRecord) throws IOException - Throws:
IOException
-
onReadyToWrite
- Throws:
IOException
-
aggregate
Aggregates records in a queue to be written as one chunk.
-