DATA - The type of the datagram to be operated with.org.refcodes.component.Closable, org.refcodes.component.Closable.CloseAutomaton, org.refcodes.component.ClosedAccessor, org.refcodes.component.ConnectableComponent, org.refcodes.component.ConnectableComponent.ConnectableAutomaton, org.refcodes.component.ConnectionStatusAccessor, org.refcodes.component.OpenedAccessor, BlockProvider<DATA>, BlockReceiver<DATA>, DatagramProvider<DATA>, DatagramReceiver<DATA>, Provider<DATA>, Receivable, Receiver<DATA>, org.refcodes.mixin.ReleaseableAbstractPrefetchInputStreamReceiver, LoopbackReceiverImpl, LoopbackTransceiverImpl, ReceiverDecoratorpublic abstract class AbstractReceiver<DATA extends Serializable> extends org.refcodes.component.AbstractConnectableAutomaton implements Receiver<DATA>
AbstractReceiver is a base abstract implementation of the
Receiver interface providing common functionality for concrete real
live ByteDatagramReceiver and ByteBlockReceiver (=
Receiver) implementations.
A blocking queue is used internally to which received datagrams are put via
pushDatagram(Serializable) and which can be retrieved via
readDatagram(). The pushDatagram(Serializable) method is
your hook when extending this class.
Make sure your code fetches the datagrams quick enough to prevent filling up
of the queue. In case the queue is filled up, adding elements via
pushDatagram(Serializable) to the queue is blocked until elements
are taken from the queue via readDatagram(). So cautions are taken
to prevent a memory leak.org.refcodes.component.Closable.CloseAutomaton, org.refcodes.component.Closable.CloseBuilder<B extends org.refcodes.component.Closable.CloseBuilder<B>>org.refcodes.component.ClosedAccessor.ClosedMutator, org.refcodes.component.ClosedAccessor.ClosedPropertyorg.refcodes.component.ConnectableComponent.ConnectableAutomaton| Modifier and Type | Field | Description |
|---|---|---|
static int |
DATAGRAM_QUEUE_SIZE |
| Constructor | Description |
|---|---|
AbstractReceiver() |
Constructs a
AbstractReceiver with a default sized blocking queue
enabling a maximum of DATAGRAM_QUEUE_SIZE datagrams.
-------------------------------------------------------------------------
Make sure your code fetches the datagrams quick enough to prevent filling
up of the queue. |
AbstractReceiver(int aCapacity) |
Constructs a
AbstractReceiver with a custom sized blocking queue
enabling a maximum of datagrams as specified by the capacity parameter.
-------------------------------------------------------------------------
Make sure your code fetches the datagrams quick enough to prevent filling
up of the queue. |
| Modifier and Type | Method | Description |
|---|---|---|
void |
close() |
|
boolean |
hasDatagram() |
Determines whether a datagram is available from a
DatagramSender. |
protected void |
pushDatagram(DATA aDatagram) |
Pushes a datagram into the receiver and puts it into the blocking queue
containing the so far received datagrams.
|
protected void |
pushDatagrams(DATA[] aDatagrams) |
Pushes datagrams into the receiver and puts them into the blocking queue
containing the so far received datagrams.
|
protected void |
pushDatagrams(DATA[] aDatagrams,
int aOffset,
int aLength) |
Pushes datagrams into the receiver and puts them into the blocking queue
containing the so far received datagrams.
|
DATA |
readDatagram() |
Reads (receives) the next datagram passed from a
DatagramSender
counterpart. |
DATA[] |
readDatagrams() |
Read datagrams.
|
void |
releaseAll() |
getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, setConnectionStatuscloseIn, closeQuietly, closeUncheckedgetConnectionStatus, isConnectionOpenedclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitreadDatagramspublic static final int DATAGRAM_QUEUE_SIZE
public AbstractReceiver()
AbstractReceiver with a default sized blocking queue
enabling a maximum of DATAGRAM_QUEUE_SIZE datagrams.
-------------------------------------------------------------------------
Make sure your code fetches the datagrams quick enough to prevent filling
up of the queue. In case the queue is filled up, adding elements via
pushDatagram(Serializable) to the queue is blocked until
elements are taken from the queue via readDatagram().public AbstractReceiver(int aCapacity)
AbstractReceiver with a custom sized blocking queue
enabling a maximum of datagrams as specified by the capacity parameter.
-------------------------------------------------------------------------
Make sure your code fetches the datagrams quick enough to prevent filling
up of the queue. In case the queue is filled up, adding elements via
pushDatagram(Serializable) to the queue is blocked until
elements are taken from the queue via readDatagram().aCapacity - The capacity of the queue holding the received
datagrams.public DATA readDatagram() throws org.refcodes.component.OpenException, InterruptedException
DatagramSender
counterpart. In case none datagram is available, then this method blocks
until one is available.
To prevent blocking, use the DatagramReceiver extension's
Receivable.hasDatagram() method to test beforehand whether
a byte is available (in a multi-threaded usage scenario,
Receivable.hasDatagram() is not a reliable indicator
whether this method will block or not).
When a Thread is waiting for a datagram to be read and
Thread.interrupt() is being called, then the operation is aborted
and an InterruptedException is thrown.readDatagram in interface DatagramProvider<DATA extends Serializable>DatagramSender
counterpart.org.refcodes.component.OpenException - Thrown in case opening or accessing an open line
(connection, junction, link) caused problems.InterruptedException - Thrown when a Thread is waiting,
sleeping, or otherwise occupied, and the Thread is
interrupted, either before or during the activity.public DATA[] readDatagrams() throws org.refcodes.component.OpenException, InterruptedException
readDatagrams in interface BlockProvider<DATA extends Serializable>readDatagrams in interface Provider<DATA extends Serializable>readDatagrams in interface Receiver<DATA extends Serializable>org.refcodes.component.OpenException - the open exceptionInterruptedException - the interrupted exceptionpublic boolean hasDatagram()
throws org.refcodes.component.OpenException
DatagramSender.
Use the DatagramProvider extenison's
DatagramProvider.readDatagram() method for retrieving the
available datagram.hasDatagram in interface Receivableorg.refcodes.component.OpenException - Thrown in case opening or accessing an open line
(connection, junction, link) caused problems.public void close()
throws org.refcodes.component.CloseException
close in interface org.refcodes.component.Closableclose in class org.refcodes.component.AbstractConnectableAutomatonorg.refcodes.component.CloseExceptionpublic void releaseAll()
releaseAll in interface org.refcodes.mixin.Releaseableprotected void pushDatagram(DATA aDatagram) throws org.refcodes.component.OpenException
readDatagram(): use hasDatagram() to test
beforehand whether there is a datagram available.aDatagram - The datagram to be pushed at the end of the blocking
queue; to be retrieved with the readDatagram() method.org.refcodes.component.OpenException - the open exceptionprotected void pushDatagrams(DATA[] aDatagrams) throws org.refcodes.component.OpenException
readDatagram(): use hasDatagram() to test
beforehand whether there is a datagram available.aDatagrams - The datagrams to be pushed at the end of the blocking
queue; to be retrieved with the readDatagram() method.org.refcodes.component.OpenException - the open exceptionprotected void pushDatagrams(DATA[] aDatagrams, int aOffset, int aLength) throws org.refcodes.component.OpenException
readDatagram(): use hasDatagram() to test
beforehand whether there is a datagram available.aDatagrams - The datagrams to be pushed at the end of the blocking
queue; to be retrieved with the readDatagram() method.aOffset - The offset to start taking data from to be pushed.aLength - The number of elements to be pushed from the offset
onwards.org.refcodes.component.OpenException - the open exceptionCopyright © 2018. All rights reserved.