Package org.refcodes.io
Class ReceiverDecorator<DATA extends java.io.Serializable>
- java.lang.Object
-
- org.refcodes.component.AbstractConnectableAutomaton
-
- org.refcodes.io.AbstractReceiver<DATA>
-
- org.refcodes.io.ReceiverDecorator<DATA>
-
- Type Parameters:
DATA
- the generic type
- 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
,BlockProvider<DATA>
,BlockReceiver<DATA>
,DatagramProvider<DATA>
,DatagramReceiver<DATA>
,Provider<DATA>
,Receivable
,Receiver<DATA>
,org.refcodes.mixin.Releaseable
public class ReceiverDecorator<DATA extends java.io.Serializable> extends AbstractReceiver<DATA> implements Receiver<DATA>
TheReceiverDecorator
decorates aProvider
with the additional methods of aReceiver
making it easy to use aProvider
wherever aReceiver
is 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.AbstractReceiver
DATAGRAM_QUEUE_SIZE
-
-
Constructor Summary
Constructors Constructor Description ReceiverDecorator(Provider<DATA> aProvider)
Instantiates a new receiver decorator.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
boolean
hasDatagram()
Determines whether a datagram is available from aDatagramSender
.DATA
readDatagram()
Reads (receives) the next datagram passed from aDatagramSender
counterpart.DATA[]
readDatagrams()
Read datagrams.DATA[]
readDatagrams(int aBlockSize)
Read datagrams.-
Methods inherited from class org.refcodes.component.AbstractConnectableAutomaton
getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, setConnectionStatus
-
Methods inherited from class org.refcodes.io.AbstractReceiver
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
-
-
-
-
Method Detail
-
readDatagram
public DATA readDatagram() throws org.refcodes.component.OpenException, java.lang.InterruptedException
Reads (receives) the next datagram passed from aDatagramSender
counterpart. In case none datagram is available, then this method blocks until one is available. To prevent blocking, use theDatagramReceiver
extension'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 aThread
is waiting for a datagram to be read andThread.interrupt()
is being called, then the operation is aborted and anInterruptedException
is thrown.- Specified by:
readDatagram
in interfaceDatagramProvider<DATA extends java.io.Serializable>
- Overrides:
readDatagram
in classAbstractReceiver<DATA extends java.io.Serializable>
- Returns:
- The next datagram sent from the
DatagramSender
counterpart. - Throws:
org.refcodes.component.OpenException
- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.java.lang.InterruptedException
- Thrown when aThread
is waiting, sleeping, or otherwise occupied, and theThread
is interrupted, either before or during the activity.
-
hasDatagram
public boolean hasDatagram() throws org.refcodes.component.OpenException
Determines whether a datagram is available from aDatagramSender
. Use theDatagramProvider
extenison'sDatagramProvider.readDatagram()
method for retrieving the available datagram.- Specified by:
hasDatagram
in interfaceReceivable
- Overrides:
hasDatagram
in classAbstractReceiver<DATA extends java.io.Serializable>
- 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 DATA[] readDatagrams() throws org.refcodes.component.OpenException, java.lang.InterruptedException
Read datagrams.- Specified by:
readDatagrams
in interfaceBlockProvider<DATA extends java.io.Serializable>
- Specified by:
readDatagrams
in interfaceProvider<DATA extends java.io.Serializable>
- Specified by:
readDatagrams
in interfaceReceiver<DATA extends java.io.Serializable>
- Overrides:
readDatagrams
in classAbstractReceiver<DATA extends java.io.Serializable>
- Returns:
- the DAT a[]
- Throws:
org.refcodes.component.OpenException
- the open exceptionjava.lang.InterruptedException
- the interrupted exception
-
readDatagrams
public DATA[] readDatagrams(int aBlockSize) throws org.refcodes.component.OpenException, java.lang.InterruptedException
Read datagrams.- Specified by:
readDatagrams
in interfaceBlockProvider<DATA extends java.io.Serializable>
- Specified by:
readDatagrams
in interfaceProvider<DATA extends java.io.Serializable>
- Specified by:
readDatagrams
in interfaceReceiver<DATA extends java.io.Serializable>
- Parameters:
aBlockSize
- the block size- Returns:
- the DAT a[]
- Throws:
org.refcodes.component.OpenException
- the open exceptionjava.lang.InterruptedException
- the interrupted exception
-
close
public void close() throws org.refcodes.component.CloseException
- Specified by:
close
in interfaceorg.refcodes.component.Closable
- Overrides:
close
in classAbstractReceiver<DATA extends java.io.Serializable>
- Throws:
org.refcodes.component.CloseException
-
-