Package org.refcodes.io
Class ShortReceiverDecorator
- java.lang.Object
-
- org.refcodes.component.AbstractConnectableAutomaton
-
- org.refcodes.io.AbstractShortReceiver
-
- org.refcodes.io.ShortReceiverDecorator
-
- 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.Releaseable
public class ShortReceiverDecorator extends AbstractShortReceiver implements ShortReceiver
TheShortReceiverDecoratordecorates aShortProviderwith the additional methods of aShortReceivermaking it easy to use aShortProviderwherever aShortReceiveris expected. This is a very plain implementation:hasDatagram()always returns true ifAbstractConnectableAutomaton.isOpened()is true and as long as none of thereadDatagram(),readDatagrams()orreadDatagrams(int)methods threw anOpenException(InterruptedException). This implementation actually behaves as ifclose()has been called after verifyinghasDatagram()and before any of the read methods have been called.
-
-
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 inherited from class org.refcodes.io.AbstractShortReceiver
_datagramQueue, DATAGRAM_QUEUE_SIZE
-
-
Constructor Summary
Constructors Constructor Description ShortReceiverDecorator(ShortProvider aShortProvider)Instantiates a new short receiver decorator.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()booleanhasDatagram()Determines whether a datagram is available from aDatagramSender.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.-
Methods inherited from class org.refcodes.component.AbstractConnectableAutomaton
getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, setConnectionStatus
-
Methods inherited from class org.refcodes.io.AbstractShortReceiver
pushDatagram, pushDatagrams, pushDatagrams, releaseAll
-
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
-
-
-
-
Constructor Detail
-
ShortReceiverDecorator
public ShortReceiverDecorator(ShortProvider aShortProvider)
Instantiates a new short receiver decorator.- Parameters:
aShortProvider- the short provider
-
-
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- Overrides:
readDatagramin classAbstractShortReceiver- 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.
-
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- Overrides:
hasDatagramin classAbstractShortReceiver- 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.
-
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- Overrides:
readDatagramsin classAbstractShortReceiver- 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- Overrides:
readDatagramsin classAbstractShortReceiver- 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.
-
close
public void close() throws org.refcodes.component.CloseException- Specified by:
closein interfaceorg.refcodes.component.Closable- Overrides:
closein classAbstractShortReceiver- Throws:
org.refcodes.component.CloseException
-
-