Package org.refcodes.io
Class BidirectionalStreamTransceiverImpl<DATA extends java.io.Serializable>
- java.lang.Object
-
- org.refcodes.io.BidirectionalStreamTransceiverImpl<DATA>
-
- Type Parameters:
DATA- the generic type
- All Implemented Interfaces:
java.io.Flushable,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.Flushable,org.refcodes.component.OpenedAccessor,BlockConsumer<DATA>,BlockProvider<DATA>,BlockReceiver<DATA>,BlockSender<DATA>,Consumer<DATA>,DatagramConsumer<DATA>,DatagramProvider<DATA>,DatagramReceiver<DATA>,DatagramSender<DATA>,DatagramTransceiver<DATA>,Provider<DATA>,Receivable,Receiver<DATA>,Sendable,Sender<DATA>,Transceiver<DATA>,org.refcodes.mixin.Releaseable
public class BidirectionalStreamTransceiverImpl<DATA extends java.io.Serializable> extends java.lang.Object implements Transceiver<DATA>
The Class BidirectionalStreamTransceiverImpl.- Author:
- steiner
-
-
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
-
-
Constructor Summary
Constructors Constructor Description BidirectionalStreamTransceiverImpl(java.io.InputStream aInputStream, java.io.OutputStream aOutputStream)Instantiates a new bidirectional stream transceiver impl.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()voidflush()org.refcodes.component.ConnectionStatusgetConnectionStatus()booleanhasDatagram()Determines whether a datagram is available from aDatagramSender.booleanisClosable()booleanisClosed()booleanisOpened()DATAreadDatagram()Reads (receives) the next datagram passed from aDatagramSendercounterpart.DATA[]readDatagrams()Read datagrams.voidreleaseAll()voidwriteDatagram(DATA aDatagram)Writes (sends) a datagram to a listeningDatagramReceiver.voidwriteDatagrams(DATA[] aDatagram)Writes (sends) a datagram block to a listeningDatagramReceiverorBlockReceiver.voidwriteDatagrams(DATA[] aDatagram, int aOffset, int aLength)Write datagrams.-
Methods inherited from interface org.refcodes.component.Closable
closeIn, closeQuietly, closeUnchecked
-
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
-
-
-
-
Constructor Detail
-
BidirectionalStreamTransceiverImpl
public BidirectionalStreamTransceiverImpl(java.io.InputStream aInputStream, java.io.OutputStream aOutputStream) throws org.refcodes.component.OpenExceptionInstantiates a new bidirectional stream transceiver impl.- Parameters:
aInputStream- the input streamaOutputStream- the output stream- Throws:
org.refcodes.component.OpenException- the open exception
-
-
Method Detail
-
isClosed
public boolean isClosed()
- Specified by:
isClosedin interfaceorg.refcodes.component.ClosedAccessor
-
isOpened
public boolean isOpened()
- Specified by:
isOpenedin interfaceorg.refcodes.component.OpenedAccessor
-
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- 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:
readDatagramsin interfaceBlockProvider<DATA extends java.io.Serializable>- Specified by:
readDatagramsin interfaceProvider<DATA extends java.io.Serializable>- Specified by:
readDatagramsin interfaceReceiver<DATA extends java.io.Serializable>- Returns:
- the DAT a[]
- Throws:
org.refcodes.component.OpenException- the open exceptionjava.lang.InterruptedException- the interrupted exception
-
getConnectionStatus
public org.refcodes.component.ConnectionStatus getConnectionStatus()
- Specified by:
getConnectionStatusin interfaceorg.refcodes.component.ConnectionStatusAccessor
-
releaseAll
public void releaseAll()
- Specified by:
releaseAllin interfaceorg.refcodes.mixin.Releaseable
-
close
public void close() throws org.refcodes.component.CloseException- Specified by:
closein interfaceorg.refcodes.component.Closable- Throws:
org.refcodes.component.CloseException
-
readDatagram
public DATA readDatagram() throws org.refcodes.component.OpenException, java.lang.InterruptedException
Reads (receives) the next datagram passed from aDatagramSendercounterpart. In case none datagram is available, then this method blocks until one is available. To prevent blocking, use theDatagramReceiverextension'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 datagram to be read andThread.interrupt()is being called, then the operation is aborted and anInterruptedExceptionis thrown.- Specified by:
readDatagramin interfaceDatagramProvider<DATA extends java.io.Serializable>- Returns:
- The next datagram sent from the
DatagramSendercounterpart. - 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.
-
writeDatagrams
public void writeDatagrams(DATA[] aDatagram) throws org.refcodes.component.OpenException
Writes (sends) a datagram block to a listeningDatagramReceiverorBlockReceiver.- Specified by:
writeDatagramsin interfaceBlockConsumer<DATA extends java.io.Serializable>- Specified by:
writeDatagramsin interfaceConsumer<DATA extends java.io.Serializable>- Parameters:
aDatagram- The datagram to be pushed to the receivingDatagramReceiverorBlockReceiver.- Throws:
org.refcodes.component.OpenException- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
-
writeDatagrams
public void writeDatagrams(DATA[] aDatagram, int aOffset, int aLength) throws org.refcodes.component.OpenException
Write datagrams.- Specified by:
writeDatagramsin interfaceBlockConsumer<DATA extends java.io.Serializable>- Specified by:
writeDatagramsin interfaceSender<DATA extends java.io.Serializable>- Parameters:
aDatagram- the datagramaOffset- the offsetaLength- the length- Throws:
org.refcodes.component.OpenException- the open exception
-
writeDatagram
public void writeDatagram(DATA aDatagram) throws org.refcodes.component.OpenException
Writes (sends) a datagram to a listeningDatagramReceiver.- Specified by:
writeDatagramin interfaceConsumer<DATA extends java.io.Serializable>- Specified by:
writeDatagramin interfaceDatagramConsumer<DATA extends java.io.Serializable>- Parameters:
aDatagram- The datagram to be pushed to the receivingDatagramConsumer.- Throws:
org.refcodes.component.OpenException- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
-
flush
public void flush() throws org.refcodes.component.OpenException
-
isClosable
public boolean isClosable()
- Specified by:
isClosablein interfaceorg.refcodes.component.Closable.CloseAutomaton
-
-