Module org.refcodes.io
Package org.refcodes.io
Class AbstractDatagramsReceiver<DATA extends Serializable>
java.lang.Object
org.refcodes.component.AbstractConnectableAutomaton
org.refcodes.io.AbstractDatagramsReceiver<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
,Availability
,DatagramDestination<DATA>
,DatagramReceiver<DATA>
,DatagramsDestination<DATA>
,DatagramsReceiver<DATA>
,Receivable
,org.refcodes.mixin.Loggable
- Direct Known Subclasses:
AbstractPrefetchInputStreamReceiver
,DatagramsReceiverDecorator
,LoopbackDatagramsReceiver
,LoopbackDatagramsTransceiver
public abstract class AbstractDatagramsReceiver<DATA extends Serializable>
extends org.refcodes.component.AbstractConnectableAutomaton
implements DatagramsReceiver<DATA>, org.refcodes.mixin.Loggable
The
AbstractDatagramsReceiver
is a base abstract implementation of
the DatagramsReceiver
interface providing common functionality for
concrete real live implementations.-
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
Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionStatusAccessor
org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusMutator, org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusProperty
Nested classes/interfaces inherited from interface org.refcodes.component.OpenedAccessor
org.refcodes.component.OpenedAccessor.OpenedMutator, org.refcodes.component.OpenedAccessor.OpenedProperty
-
Field Summary
Fields inherited from interface org.refcodes.mixin.Loggable
RUNTIME_LOGGER_CLASS, RUNTIME_LOGGER_FACTORY_CLASS, RUNTIME_LOGGER_FACTORY_METHOD
-
Constructor Summary
ConstructorDescriptionConstructs aAbstractDatagramsReceiver
with a default sized blocking queue enabling a maximum ofDATAGRAM_QUEUE_SIZE
datagrams.AbstractDatagramsReceiver
(int aCapacity) Constructs aAbstractDatagramsReceiver
with a custom sized blocking queue enabling a maximum of datagrams as specified by the capacity parameter. -
Method Summary
Modifier and TypeMethodDescriptionint
Determines the number of available datagram from aDatagramTransmitter
.void
close()
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.receive()
Reads (receives) the next datagram passed from aDatagramTransmitter
counterpart.DATA[]
Reads (receives) the all currently available data.Methods inherited from class org.refcodes.component.AbstractConnectableAutomaton
getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, setConnectionStatus
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.Availability
hasAvailable
Methods inherited from interface org.refcodes.component.Closable
closeIn, closeQuietly, closeUnchecked
Methods inherited from interface org.refcodes.component.Closable.CloseAutomaton
isClosable
Methods inherited from interface org.refcodes.component.ClosedAccessor
isClosed
Methods inherited from interface org.refcodes.component.ConnectionStatusAccessor
getConnectionStatus, isOpened
Methods inherited from interface org.refcodes.io.DatagramsDestination
receive
Methods inherited from interface org.refcodes.io.DatagramsReceiver
receive
Methods inherited from interface org.refcodes.mixin.Loggable
alert, alert, critical, critical, debug, error, info, notice, panic, trace, warn, warn
-
Field Details
-
DATAGRAM_QUEUE_SIZE
public static final int DATAGRAM_QUEUE_SIZE- See Also:
-
-
Constructor Details
-
AbstractDatagramsReceiver
public AbstractDatagramsReceiver()Constructs aAbstractDatagramsReceiver
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 viareceive()
. -
AbstractDatagramsReceiver
public AbstractDatagramsReceiver(int aCapacity) Constructs aAbstractDatagramsReceiver
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 viareceive()
.- Parameters:
aCapacity
- The capacity of the queue holding the received datagrams.
-
-
Method Details
-
receive
Reads (receives) the next datagram passed from aDatagramTransmitter
counterpart. In case none datagram is available, then this method blocks until one is available. To prevent blocking, use theDatagramReceiver
extension'sAvailability.available()
method to test beforehand whether a byte is available (in a multi-threaded usage scenario,Availability.available()
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:
receive
in interfaceDatagramDestination<DATA extends Serializable>
- Specified by:
receive
in interfaceDatagramsDestination<DATA extends Serializable>
- Returns:
- The next datagram sent from the
DatagramTransmitter
counterpart. - Throws:
IOException
- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.EOFException
- Signals that an end of file or end of stream has been reached unexpectedly during input.
-
receiveAll
Reads (receives) the all currently available data.- Specified by:
receiveAll
in interfaceDatagramsDestination<DATA extends Serializable>
- Specified by:
receiveAll
in interfaceDatagramsReceiver<DATA extends Serializable>
- Returns:
- The next short block sent from the
DatagramsTransmitter
orDatagramReceiver
counterpart. - Throws:
IOException
- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.EOFException
- Signals that an end of file or end of stream has been reached unexpectedly during input.
-
available
Determines the number of available datagram from aDatagramTransmitter
. Use theDatagramDestination
extenison'sDatagramDestination.receive()
method for retrieving available datagrams.- Specified by:
available
in interfaceAvailability
- Returns:
- The number of datagrams ready to be retrieved .
- Throws:
IOException
- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
-
close
- Specified by:
close
in interfaceorg.refcodes.component.Closable
- Overrides:
close
in classorg.refcodes.component.AbstractConnectableAutomaton
- Throws:
IOException
-
pushDatagram
Pushes a datagram into the receiver and puts it into the blocking queue containing the so far received datagrams. Them datagrams can be retrieved viareceive()
: useavailable()
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 thereceive()
method.- Throws:
IOException
- the open exception
-
pushDatagrams
Pushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams. Them datagrams can be retrieved viareceive()
: useavailable()
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 thereceive()
method.- Throws:
IOException
- the open exception
-
pushDatagrams
Pushes datagrams into the receiver and puts them into the blocking queue containing the so far received datagrams. Them datagrams can be retrieved viareceive()
: useavailable()
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 thereceive()
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:
IOException
- the open exception
-