Package org.refcodes.io
Class ByteReceiverDecorator
- java.lang.Object
-
- org.refcodes.io.AbstractByteProvider
-
- org.refcodes.io.AbstractByteReceiver
-
- org.refcodes.io.ByteReceiverDecorator
-
- 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
,ByteBlockProvider
,ByteBlockReceiver
,ByteDatagramProvider
,ByteDatagramReceiver
,ByteProvider
,ByteReceiver
,Receivable
,org.refcodes.mixin.Releaseable
public class ByteReceiverDecorator extends AbstractByteReceiver implements ByteReceiver
TheByteReceiverDecorator
decorates aByteProvider
with the additional methods of aByteReceiver
making it easy to use aByteProvider
wherever aByteReceiver
is expected. This is a very plain implementation:hasDatagram()
always returns true ifAbstractByteReceiver.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 class org.refcodes.io.AbstractByteReceiver
AbstractByteReceiver.ConnectableAutomaton
-
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.AbstractByteProvider
_datagramQueue, DATAGRAM_QUEUE_SIZE
-
Fields inherited from class org.refcodes.io.AbstractByteReceiver
_automaton
-
-
Constructor Summary
Constructors Constructor Description ByteReceiverDecorator(ByteProvider aByteProvider)
Instantiates a new byte 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
.byte
readDatagram()
Reads (receives) the next byte passed from aDatagramSender
counterpart.byte[]
readDatagrams()
Caution: Reads till anOpenException
(or anInterruptedException
in case of blocking till more data is available) occurs.byte[]
readDatagrams(int aBlockSize)
Similar toByteBlockProvider.readDatagrams()
though at maximum the amount of data as provided by the block-size is returned.-
Methods inherited from class org.refcodes.io.AbstractByteProvider
pushDatagram, pushDatagrams, pushDatagrams
-
Methods inherited from class org.refcodes.io.AbstractByteReceiver
getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, releaseAll, 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
-
-
-
-
Constructor Detail
-
ByteReceiverDecorator
public ByteReceiverDecorator(ByteProvider aByteProvider)
Instantiates a new byte receiver decorator.- Parameters:
aByteProvider
- the byte provider
-
-
Method Detail
-
readDatagram
public byte readDatagram() throws org.refcodes.component.OpenException, java.lang.InterruptedException
Reads (receives) the next byte passed from aDatagramSender
counterpart. In case none byte is available, then this method blocks until one is available. To prevent blocking, use theByteDatagramReceiver
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 byte to be read andThread.interrupt()
is being called, then the operation is aborted and anInterruptedException
is thrown.- Specified by:
readDatagram
in interfaceByteDatagramProvider
- Overrides:
readDatagram
in classAbstractByteReceiver
- Returns:
- The next byte sent from the
ByteDatagramSender
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 classAbstractByteReceiver
- 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 byte[] readDatagrams() throws org.refcodes.component.OpenException, java.lang.InterruptedException
Caution: Reads till anOpenException
(or anInterruptedException
in case of blocking till more data is available) occurs. Reads (receives) the next byte block passed from aBlockSender
orDatagramSender
counterpart. In case none byte block is available, then this method blocks until one is available. When aThread
is waiting for a byte to be read andThread.interrupt()
is being called, then the operation is aborted and anInterruptedException
is thrown.- Specified by:
readDatagrams
in interfaceByteBlockProvider
- Specified by:
readDatagrams
in interfaceByteProvider
- Specified by:
readDatagrams
in interfaceByteReceiver
- Overrides:
readDatagrams
in classAbstractByteReceiver
- Returns:
- The next byte block sent from the
BlockSender
orDatagramReceiver
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.
-
readDatagrams
public byte[] readDatagrams(int aBlockSize) throws org.refcodes.component.OpenException, java.lang.InterruptedException
Similar toByteBlockProvider.readDatagrams()
though at maximum the amount of data as provided by the block-size is returned.- Specified by:
readDatagrams
in interfaceByteBlockProvider
- Specified by:
readDatagrams
in interfaceByteProvider
- Specified by:
readDatagrams
in interfaceByteReceiver
- Overrides:
readDatagrams
in classAbstractByteReceiver
- 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 methodByteBlockProvider.readDatagrams()
.- Returns:
- The next short block sent from the
BlockSender
orDatagramReceiver
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.
-
close
public void close() throws org.refcodes.component.CloseException
- Specified by:
close
in interfaceorg.refcodes.component.Closable
- Overrides:
close
in classAbstractByteReceiver
- Throws:
org.refcodes.component.CloseException
-
-