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, ByteBlockProvider, ByteBlockReceiver, ByteDatagramProvider, ByteDatagramReceiver, ByteProvider, ByteReceiver, Receivable, org.refcodes.mixin.ReleaseableAbstractPrefetchInputStreamByteReceiver, ByteArrayReceiverImpl, ByteReceiverDecorator, LoopbackByteReceiverImpl, LoopbackByteTransceiverImplpublic abstract class AbstractByteReceiver extends AbstractByteProvider implements ByteReceiver
AbstractByteReceiver is a base abstract implementation of the
ByteReceiver interface providing common functionality for concrete
real live ByteDatagramReceiver and ByteBlockReceiver (=
ByteReceiver) implementations.
A blocking queue is used internally to which received datagrams are put via
AbstractByteProvider.pushDatagram(byte) and which can be retrieved via
readDatagram(). The AbstractByteProvider.pushDatagram(byte) 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
AbstractByteProvider.pushDatagram(byte) to the queue is blocked until elements are taken
from the queue via readDatagram(). So cautions are taken to prevent
a memory leak.| Modifier and Type | Class | Description |
|---|---|---|
protected static class |
AbstractByteReceiver.ConnectableAutomaton |
The Class ConnectableAutomaton.
|
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.ClosedProperty| Modifier and Type | Field | Description |
|---|---|---|
protected AbstractByteReceiver.ConnectableAutomaton |
_automaton |
_datagramQueue, DATAGRAM_QUEUE_SIZE| Constructor | Description |
|---|---|
AbstractByteReceiver() |
Constructs a
AbstractByteReceiver with a default sized blocking
queue enabling a maximum of AbstractByteProvider.DATAGRAM_QUEUE_SIZE datagrams.
-------------------------------------------------------------------------
Make sure your code fetches the datagrams quick enough to prevent filling
up of the queue. |
AbstractByteReceiver(int aCapacity) |
Constructs a
AbstractByteReceiver 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() |
|
org.refcodes.component.ConnectionStatus |
getConnectionStatus() |
|
boolean |
hasDatagram() |
Determines whether a datagram is available from a
DatagramSender. |
boolean |
isClosable() |
|
boolean |
isClosed() |
|
protected boolean |
isOpenable() |
Checks if is openable.
|
boolean |
isOpened() |
|
protected void |
open() |
Open.
|
byte |
readDatagram() |
Reads (receives) the next byte passed from a
DatagramSender
counterpart. |
byte[] |
readDatagrams() |
Caution: Reads till an
OpenException (or an
InterruptedException in case of blocking till more data is
available) occurs. |
byte[] |
readDatagrams(int aBlockSize) |
Similar to
ByteBlockProvider.readDatagrams() though at maximum the amount of data
as provided by the block-size is returned. |
void |
releaseAll() |
|
protected void |
setConnectionStatus(org.refcodes.component.ConnectionStatus aConnectionStatus) |
Sets the connection status.
|
pushDatagram, pushDatagrams, pushDatagramsprotected AbstractByteReceiver.ConnectableAutomaton _automaton
public AbstractByteReceiver()
AbstractByteReceiver with a default sized blocking
queue enabling a maximum of AbstractByteProvider.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
AbstractByteProvider.pushDatagram(byte) to the queue is blocked until elements are
taken from the queue via readDatagram().public AbstractByteReceiver(int aCapacity)
AbstractByteReceiver 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
AbstractByteProvider.pushDatagram(byte) 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 byte readDatagram()
throws org.refcodes.component.OpenException,
InterruptedException
DatagramSender
counterpart. In case none byte is available, then this method blocks
until one is available.
To prevent blocking, use the ByteDatagramReceiver 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 byte to be read and
Thread.interrupt() is being called, then the operation is aborted
and an InterruptedException is thrown.readDatagram in interface ByteDatagramProviderreadDatagram in class AbstractByteProviderByteDatagramSender
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 byte[] readDatagrams()
throws org.refcodes.component.OpenException,
InterruptedException
OpenException (or an
InterruptedException in case of blocking till more data is
available) occurs.
Reads (receives) the next byte block passed from a BlockSender or
DatagramSender counterpart. In case none byte block is available,
then this method blocks until one is available.
When a Thread is waiting for a byte to be read and
Thread.interrupt() is being called, then the operation is aborted
and an InterruptedException is thrown.readDatagrams in interface ByteBlockProviderreadDatagrams in interface ByteProviderreadDatagrams in interface ByteReceiverreadDatagrams in class AbstractByteProviderBlockSender or
DatagramReceiver 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 byte[] readDatagrams(int aBlockSize)
throws org.refcodes.component.OpenException,
InterruptedException
ByteBlockProvider.readDatagrams() though at maximum the amount of data
as provided by the block-size is returned.readDatagrams in interface ByteBlockProviderreadDatagrams in interface ByteProviderreadDatagrams in interface ByteReceiverreadDatagrams in class AbstractByteProvideraBlockSize - The block-size which is not to exceeded by the returned
data. A value of -1 specifies to retrieve all available datagrams
(same behavior as method ByteBlockProvider.readDatagrams().BlockSender or
DatagramReceiver 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 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.Closableorg.refcodes.component.CloseExceptionpublic void releaseAll()
releaseAll in interface org.refcodes.mixin.Releaseablepublic boolean isOpened()
isOpened in interface org.refcodes.component.OpenedAccessorpublic boolean isClosable()
isClosable in interface org.refcodes.component.Closable.CloseAutomatonpublic boolean isClosed()
isClosed in interface org.refcodes.component.ClosedAccessorpublic org.refcodes.component.ConnectionStatus getConnectionStatus()
getConnectionStatus in interface org.refcodes.component.ConnectionStatusAccessorprotected void open()
throws org.refcodes.component.OpenException
org.refcodes.component.OpenException - the open exceptionprotected void setConnectionStatus(org.refcodes.component.ConnectionStatus aConnectionStatus)
aConnectionStatus - the new connection statusprotected boolean isOpenable()
Copyright © 2018. All rights reserved.