Package org.refcodes.io
Class AbstractReceiver<DATA extends java.io.Serializable>
- java.lang.Object
-
- org.refcodes.component.AbstractConnectableAutomaton
-
- org.refcodes.io.AbstractReceiver<DATA>
-
- Type Parameters:
DATA
- The type of the datagram to be operated with.
- 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.Loggable
,org.refcodes.mixin.Releaseable
- Direct Known Subclasses:
AbstractPrefetchInputStreamReceiver
,LoopbackReceiverImpl
,LoopbackTransceiverImpl
,ReceiverDecorator
public abstract class AbstractReceiver<DATA extends java.io.Serializable> extends org.refcodes.component.AbstractConnectableAutomaton implements Receiver<DATA>, org.refcodes.mixin.Loggable
TheAbstractReceiver
is a base abstract implementation of theReceiver
interface providing common functionality for concrete real liveByteDatagramReceiver
andByteBlockReceiver
(=Receiver
) implementations. A blocking queue is used internally to which received datagrams are put viapushDatagram(Serializable)
and which can be retrieved viareadDatagram()
. ThepushDatagram(Serializable)
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(Serializable)
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 static int
DATAGRAM_QUEUE_SIZE
-
Constructor Summary
Constructors Constructor Description AbstractReceiver()
Constructs aAbstractReceiver
with a default sized blocking queue enabling a maximum ofDATAGRAM_QUEUE_SIZE
datagrams. ------------------------------------------------------------------------- Make sure your code fetches the datagrams quick enough to prevent filling up of the queue.AbstractReceiver(int aCapacity)
Constructs aAbstractReceiver
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.
-
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
.protected void
pushDatagram(DATA aDatagram)
Pushes a datagram into the receiver and puts it into the blocking queue containing the so far received datagrams.protected void
pushDatagrams(DATA[] aDatagrams)
Pushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams.protected void
pushDatagrams(DATA[] aDatagrams, int aOffset, int aLength)
Pushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams.DATA
readDatagram()
Reads (receives) the next datagram passed from aDatagramSender
counterpart.DATA[]
readDatagrams()
Read datagrams.void
releaseAll()
-
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
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.refcodes.io.Receiver
readDatagrams
-
-
-
-
Field Detail
-
DATAGRAM_QUEUE_SIZE
public static final int DATAGRAM_QUEUE_SIZE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
AbstractReceiver
public AbstractReceiver()
Constructs aAbstractReceiver
with a default sized blocking queue enabling a maximum ofDATAGRAM_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 viapushDatagram(Serializable)
to the queue is blocked until elements are taken from the queue viareadDatagram()
.
-
AbstractReceiver
public AbstractReceiver(int aCapacity)
Constructs aAbstractReceiver
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 viapushDatagram(Serializable)
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 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>
- 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.
-
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>
- Returns:
- the DAT a[]
- Throws:
org.refcodes.component.OpenException
- the open exceptionjava.lang.InterruptedException
- the interrupted exception
-
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
- 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:
close
in interfaceorg.refcodes.component.Closable
- Overrides:
close
in classorg.refcodes.component.AbstractConnectableAutomaton
- Throws:
org.refcodes.component.CloseException
-
releaseAll
public void releaseAll()
- Specified by:
releaseAll
in interfaceorg.refcodes.mixin.Releaseable
-
pushDatagram
protected void pushDatagram(DATA aDatagram) throws org.refcodes.component.OpenException
Pushes 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(DATA[] aDatagrams) throws org.refcodes.component.OpenException
Pushes 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(DATA[] aDatagrams, int aOffset, int aLength) throws org.refcodes.component.OpenException
Pushes 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
-
-