Package org.refcodes.io
Class AbstractShortReceiver
- java.lang.Object
-
- org.refcodes.component.AbstractConnectableAutomaton
-
- org.refcodes.io.AbstractShortReceiver
-
- All Implemented Interfaces:
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,Receivable,ShortBlockProvider,ShortBlockReceiver,ShortDatagramProvider,ShortDatagramReceiver,ShortProvider,ShortReceiver,org.refcodes.mixin.Loggable,org.refcodes.mixin.Releaseable
- Direct Known Subclasses:
LoopbackShortReceiverImpl,LoopbackShortTransceiverImpl,ShortArrayReceiverImpl,ShortReceiverDecorator
public abstract class AbstractShortReceiver extends org.refcodes.component.AbstractConnectableAutomaton implements ShortReceiver, org.refcodes.mixin.Loggable
TheAbstractShortReceiveris a base abstract implementation of theShortReceiverinterface providing common functionality for concrete real liveShortDatagramReceiverandShortBlockReceiver(=ShortReceiver) implementations. A blocking queue is used internally to which received datagrams are put viapushDatagram(short)and which can be retrieved viareadDatagram(). ThepushDatagram(short)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 viapushDatagram(short)to the queue is blocked until elements are taken from the queue viareadDatagram(). So cautions are taken to prevent a memory leak.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.refcodes.component.Closable
org.refcodes.component.Closable.CloseAutomaton, org.refcodes.component.Closable.CloseBuilder<B extends org.refcodes.component.Closable.CloseBuilder<B>>
-
Nested classes/interfaces inherited from interface org.refcodes.component.ClosedAccessor
org.refcodes.component.ClosedAccessor.ClosedMutator, org.refcodes.component.ClosedAccessor.ClosedProperty
-
Nested classes/interfaces inherited from interface org.refcodes.component.ConnectableComponent
org.refcodes.component.ConnectableComponent.ConnectableAutomaton
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.concurrent.LinkedBlockingQueue<java.lang.Short>_datagramQueuestatic intDATAGRAM_QUEUE_SIZE
-
Constructor Summary
Constructors Constructor Description AbstractShortReceiver()Constructs aAbstractShortReceiverwith a default sized blocking queue enabling a maximum ofDATAGRAM_QUEUE_SIZEdatagrams. ------------------------------------------------------------------------- Make sure your code fetches the datagrams quick enough to prevent filling up of the queue.AbstractShortReceiver(int aCapacity)Constructs aAbstractShortReceiverwith 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.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()booleanhasDatagram()Determines whether a datagram is available from aDatagramSender.protected voidpushDatagram(short aDatagram)Pushes a datagram into the receiver and puts it into the blocking queue containing the so far received datagrams.protected voidpushDatagrams(short[] aDatagrams)Pushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams.protected voidpushDatagrams(short[] aDatagrams, int aOffset, int aLength)Pushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams.shortreadDatagram()Reads (receives) the next short passed from aDatagramSendercounterpart.short[]readDatagrams()Caution: Reads till anOpenException(or anInterruptedExceptionin case of blocking till more data is available) occurs.short[]readDatagrams(int aBlockSize)Similar toShortBlockProvider.readDatagrams()though at maximum the amount of data as provided by the block-size is returned.voidreleaseAll()-
Methods inherited from class org.refcodes.component.AbstractConnectableAutomaton
getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, setConnectionStatus
-
Methods inherited from interface org.refcodes.component.Closable
closeIn, closeQuietly, closeUnchecked
-
Methods inherited from interface org.refcodes.component.ConnectionStatusAccessor
getConnectionStatus, isConnectionOpened
-
Methods inherited from interface org.refcodes.mixin.Loggable
alert, alert, critical, critical, debug, error, info, notice, panic, trace, warn, warn
-
-
-
-
Field Detail
-
DATAGRAM_QUEUE_SIZE
public static final int DATAGRAM_QUEUE_SIZE
- See Also:
- Constant Field Values
-
_datagramQueue
protected java.util.concurrent.LinkedBlockingQueue<java.lang.Short> _datagramQueue
-
-
Constructor Detail
-
AbstractShortReceiver
public AbstractShortReceiver()
Constructs aAbstractShortReceiverwith a default sized blocking queue enabling a maximum ofDATAGRAM_QUEUE_SIZEdatagrams. ------------------------------------------------------------------------- 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 viapushDatagram(short)to the queue is blocked until elements are taken from the queue viareadDatagram().
-
AbstractShortReceiver
public AbstractShortReceiver(int aCapacity)
Constructs aAbstractShortReceiverwith 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 viapushDatagram(short)to the queue is blocked until elements are taken from the queue viareadDatagram().- Parameters:
aCapacity- The capacity of the queue holding the received datagrams.
-
-
Method Detail
-
readDatagram
public short readDatagram() throws org.refcodes.component.OpenException, java.lang.InterruptedExceptionReads (receives) the next short passed from aDatagramSendercounterpart. In case none short is available, then this method blocks until one is available. To prevent blocking, use theShortDatagramReceiverextension'sReceivable.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 aThreadis waiting for a short to be read andThread.interrupt()is being called, then the operation is aborted and anInterruptedExceptionis thrown.- Specified by:
readDatagramin interfaceShortDatagramProvider- Returns:
- The next short sent from the
ShortDatagramSendercounterpart. - Throws:
org.refcodes.component.OpenException- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.java.lang.InterruptedException- Thrown when aThreadis waiting, sleeping, or otherwise occupied, and theThreadis interrupted, either before or during the activity.
-
readDatagrams
public short[] readDatagrams() throws org.refcodes.component.OpenException, java.lang.InterruptedExceptionCaution: Reads till anOpenException(or anInterruptedExceptionin case of blocking till more data is available) occurs. Reads (receives) the next short block passed from aBlockSenderorDatagramSendercounterpart. In case none short block is available, then this method blocks until one is available. When aThreadis waiting for a short to be read andThread.interrupt()is being called, then the operation is aborted and anInterruptedExceptionis thrown.- Specified by:
readDatagramsin interfaceShortBlockProvider- Specified by:
readDatagramsin interfaceShortProvider- Specified by:
readDatagramsin interfaceShortReceiver- Returns:
- The next short block sent from the
BlockSenderorDatagramReceivercounterpart. - Throws:
org.refcodes.component.OpenException- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.java.lang.InterruptedException- Thrown when aThreadis waiting, sleeping, or otherwise occupied, and theThreadis interrupted, either before or during the activity.
-
readDatagrams
public short[] readDatagrams(int aBlockSize) throws org.refcodes.component.OpenException, java.lang.InterruptedExceptionSimilar toShortBlockProvider.readDatagrams()though at maximum the amount of data as provided by the block-size is returned.- Specified by:
readDatagramsin interfaceShortBlockProvider- Specified by:
readDatagramsin interfaceShortProvider- Specified by:
readDatagramsin interfaceShortReceiver- Parameters:
aBlockSize- 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 methodShortBlockProvider.readDatagrams().- Returns:
- The next short block sent from the
BlockSenderorDatagramReceivercounterpart. - Throws:
org.refcodes.component.OpenException- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.java.lang.InterruptedException- Thrown when aThreadis waiting, sleeping, or otherwise occupied, and theThreadis interrupted, either before or during the activity.
-
hasDatagram
public boolean hasDatagram() throws org.refcodes.component.OpenExceptionDetermines whether a datagram is available from aDatagramSender. Use theDatagramProviderextenison'sDatagramProvider.readDatagram()method for retrieving the available datagram.- Specified by:
hasDatagramin interfaceReceivable- Returns:
- True in case there is a datagram ready to be retrieved .
- Throws:
org.refcodes.component.OpenException- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
-
close
public void close() throws org.refcodes.component.CloseException- Specified by:
closein interfaceorg.refcodes.component.Closable- Overrides:
closein classorg.refcodes.component.AbstractConnectableAutomaton- Throws:
org.refcodes.component.CloseException
-
releaseAll
public void releaseAll()
- Specified by:
releaseAllin interfaceorg.refcodes.mixin.Releaseable
-
pushDatagram
protected void pushDatagram(short aDatagram) throws org.refcodes.component.OpenExceptionPushes a datagram into the receiver and puts it into the blocking queue containing the so far received datagrams. Them datagrams can be retrieved viareadDatagram(): usehasDatagram()to test beforehand whether there is a datagram available.- Parameters:
aDatagram- The datagram to be pushed at the end of the blocking queue; to be retrieved with thereadDatagram()method.- Throws:
org.refcodes.component.OpenException- the open exception
-
pushDatagrams
protected void pushDatagrams(short[] aDatagrams) throws org.refcodes.component.OpenExceptionPushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams. Them datagrams can be retrieved viareadDatagram(): usehasDatagram()to test beforehand whether there is a datagram available.- Parameters:
aDatagrams- The datagrams to be pushed at the end of the blocking queue; to be retrieved with thereadDatagram()method.- Throws:
org.refcodes.component.OpenException- the open exception
-
pushDatagrams
protected void pushDatagrams(short[] aDatagrams, int aOffset, int aLength) throws org.refcodes.component.OpenExceptionPushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams. Them datagrams can be retrieved viareadDatagram(): usehasDatagram()to test beforehand whether there is a datagram available.- Parameters:
aDatagrams- The datagrams to be pushed at the end of the blocking queue; to be retrieved with thereadDatagram()method.aOffset- The offset to start taking data from to be pushed.aLength- The number of elements to be pushed from the offset onwards.- Throws:
org.refcodes.component.OpenException- the open exception
-
-