Class LoopbackPort

java.lang.Object
org.refcodes.component.ConnectionAutomatonImpl<PM>
org.refcodes.serial.AbstractPort<PortMetrics>
org.refcodes.serial.LoopbackPort
All Implemented Interfaces:
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.ConnectionComponent<PortMetrics>, org.refcodes.component.ConnectionComponent.ConnectionAutomaton<PortMetrics>, org.refcodes.component.ConnectionOpenable<PortMetrics>, org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<PortMetrics>, org.refcodes.component.ConnectionStatusAccessor, org.refcodes.component.Flushable, org.refcodes.component.LinkComponent, org.refcodes.component.LinkComponent.LinkAutomaton, org.refcodes.component.Openable, org.refcodes.component.Openable.OpenAutomaton, org.refcodes.component.Openable.OpenBuilder<Port<PortMetrics>>, org.refcodes.component.OpenedAccessor, org.refcodes.io.Availability, org.refcodes.io.ByteDestination, org.refcodes.io.ByteReceiver, org.refcodes.io.BytesDestination, org.refcodes.io.ByteSource, org.refcodes.io.BytesReceiver, org.refcodes.io.BytesSource, org.refcodes.io.BytesTransceiver, org.refcodes.io.BytesTransmitter, org.refcodes.io.ByteTransceiver, org.refcodes.io.ByteTransmitter, org.refcodes.io.Receivable, org.refcodes.io.Skippable, org.refcodes.io.TimeoutInputStreamAccessor, org.refcodes.io.Transmittable, org.refcodes.mixin.AliasAccessor, org.refcodes.mixin.InputStreamAccessor, org.refcodes.mixin.OutputStreamAccessor, Port<PortMetrics>, PortMetricsAccessor<PortMetrics>, SegmentDestination, SegmentReceiver, SegmentSource, SegmentTransceiver, SegmentTransmitter, SerialReceiver, SerialTransceiver, SerialTransmitter
Direct Known Subclasses:
CrossoverLoopbackPort

public class LoopbackPort
extends AbstractPort<PortMetrics>
implements Port<PortMetrics>
The LoopbackPort is an in-memory implementation of a Port which loops its output directly back to its input. This is suitable for straight forward cases where data is first transmitted to be received in the next step by the same Port. For cases using a some kind of frequent handshake between a transmitter and a receiver on the same line please use the CrossoverLoopbackPort as counterpart of a LoopbackPort for simulating a bidirectional in-memory communication between these two ports.
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.refcodes.mixin.AliasAccessor

    org.refcodes.mixin.AliasAccessor.AliasBuilder<B extends org.refcodes.mixin.AliasAccessor.AliasBuilder<B>>, org.refcodes.mixin.AliasAccessor.AliasMutator, org.refcodes.mixin.AliasAccessor.AliasProperty

    Nested classes/interfaces inherited from interface org.refcodes.io.BytesReceiver

    org.refcodes.io.BytesReceiver.ReceiverInputStream

    Nested classes/interfaces inherited from interface org.refcodes.io.BytesTransmitter

    org.refcodes.io.BytesTransmitter.TransmitterOutputStream

    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.ConnectionComponent

    org.refcodes.component.ConnectionComponent.ConnectionAutomaton<CON extends Object>, org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON extends Object,​B extends org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON,​B>>

    Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionOpenable

    org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<CON extends Object>, org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON extends Object,​B extends org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON,​B>>

    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.Flushable

    org.refcodes.component.Flushable.FlushBuilder<B extends org.refcodes.component.Flushable.FlushBuilder<B>>

    Nested classes/interfaces inherited from interface org.refcodes.mixin.InputStreamAccessor

    org.refcodes.mixin.InputStreamAccessor.InputStreamBuilder<B extends org.refcodes.mixin.InputStreamAccessor.InputStreamBuilder<?>>, org.refcodes.mixin.InputStreamAccessor.InputStreamMutator, org.refcodes.mixin.InputStreamAccessor.InputStreamProperty

    Nested classes/interfaces inherited from interface org.refcodes.component.LinkComponent

    org.refcodes.component.LinkComponent.LinkAutomaton, org.refcodes.component.LinkComponent.LinkComponentBuilder<B extends org.refcodes.component.LinkComponent.LinkComponentBuilder<B>>

    Nested classes/interfaces inherited from interface org.refcodes.component.Openable

    org.refcodes.component.Openable.OpenAutomaton, org.refcodes.component.Openable.OpenBuilder<B extends org.refcodes.component.Openable.OpenBuilder<B>>

    Nested classes/interfaces inherited from interface org.refcodes.component.OpenedAccessor

    org.refcodes.component.OpenedAccessor.OpenedMutator, org.refcodes.component.OpenedAccessor.OpenedProperty

    Nested classes/interfaces inherited from interface org.refcodes.mixin.OutputStreamAccessor

    org.refcodes.mixin.OutputStreamAccessor.OutputStreamBuilder<B extends org.refcodes.mixin.OutputStreamAccessor.OutputStreamBuilder<?>>, org.refcodes.mixin.OutputStreamAccessor.OutputStreamMutator, org.refcodes.mixin.OutputStreamAccessor.OutputStreamProperty

    Nested classes/interfaces inherited from interface org.refcodes.io.TimeoutInputStreamAccessor

    org.refcodes.io.TimeoutInputStreamAccessor.TimeoutInputStreamBuilder<B extends org.refcodes.io.TimeoutInputStreamAccessor.TimeoutInputStreamBuilder<?>>, org.refcodes.io.TimeoutInputStreamAccessor.TimeoutInputStreamMutator, org.refcodes.io.TimeoutInputStreamAccessor.TimeoutInputStreamProperty
  • Field Summary

    Fields
    Modifier and Type Field Description
    protected LoopbackPort _crossoverPort  
    protected ChunkSequence _transmitSequence  

    Fields inherited from class org.refcodes.serial.AbstractPort

    _alias, _executorService, _portMetrics

    Fields inherited from class org.refcodes.component.ConnectionAutomatonImpl

    _connectionComponent
  • Constructor Summary

    Constructors
    Constructor Description
    LoopbackPort​(String aAlias)
    Constructs a LoopbackPort.
    LoopbackPort​(String aAlias, ExecutorService aExecutorService)
    Constructs a LoopbackPort.
  • Method Summary

    Modifier and Type Method Description
    int available()
    Returns the number of bytes which can be read directly e.g. which are already been stored in an internal buffer.
    void close()
    Attention: Implementations of this method should do a Object.notifyAll() in order to terminate any pending asynchronous operations such as SegmentReceiver.onReceiveSegment(Segment) or SegmentReceiver.onReceiveSegment(Segment, SegmentConsumer).
    <SEGMENT extends Segment>
    SegmentResult<SEGMENT>
    doTransmitSegment​(SEGMENT aSegment)
    Asynchronously sends a Segment's Sequence data (does not block this thread)..
    <SEGMENT extends Segment>
    void
    doTransmitSegment​(SEGMENT aSegment, SegmentConsumer<SEGMENT> aSegmentConsumer)
    Asynchronously sends a Segment's Sequence data (does not block this thread)..
    String getAlias()
    Returns the unambiguous technical name of the TTY-/COM-Port.
    PortMetrics getPortMetrics()
    Retrieves the PortMetrics from the PortMetrics property.
    <SEGMENT extends Segment>
    SegmentResult<SEGMENT>
    onReceiveSegment​(SEGMENT aSegment)
    Asynchronously receives a Segment's Sequence data (does not block this thread) and updates the Segment by invoking Segment.fromTransmission(Sequence).
    <SEGMENT extends Segment>
    void
    onReceiveSegment​(SEGMENT aSegment, SegmentConsumer<SEGMENT> aSegmentConsumer)
    Asynchronously receives a Segment's Sequence data (does not block this thread) and updates the Segment by invoking Segment.fromTransmission(Sequence), passing the result to the callback SegmentConsumer.onSegment(Segment).
    void open()
    Attention: Implementations of this method should do a Object.notifyAll() in order to terminate any pending asynchronous operations such as SegmentReceiver.onReceiveSegment(Segment) or SegmentReceiver.onReceiveSegment(Segment, SegmentConsumer).
    void receiveBytes​(byte[] aBuffer, int aOffset, int aLength)
    protected void setCrossoverPort​(LoopbackPort aPort)
    Hook to set a crossover loopback port in order to attach a LoopbackPort to the other end of the wire and transform a loopback device into two crossover loopback devices.
    String toString()
    void transmitSequence​(Sequence aSequence)
    Sends the number of bytes specified.
    LoopbackPort withOpen()

    Methods inherited from class org.refcodes.serial.AbstractPort

    isOpenable, open, receiveSegment

    Methods inherited from class org.refcodes.component.ConnectionAutomatonImpl

    getConnectionStatus, isClosable, isClosed, isOpenable, isOpened

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.refcodes.io.Availability

    hasAvailable

    Methods inherited from interface org.refcodes.io.BytesReceiver

    getInputStream, getInputStream, receiveAllBytes, receiveBytesWithin, receiveBytesWithin, receiveByteWithin, skip

    Methods inherited from interface org.refcodes.io.BytesSource

    transmitByte

    Methods inherited from interface org.refcodes.io.BytesTransmitter

    getOutputStream

    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.ConnectionOpenable

    open, openUnchecked

    Methods inherited from interface org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton

    isOpenable

    Methods inherited from interface org.refcodes.component.ConnectionStatusAccessor

    getConnectionStatus, isOpened

    Methods inherited from interface org.refcodes.component.Flushable

    flushUnchecked, isFlushable

    Methods inherited from interface org.refcodes.component.Openable

    openUnchecked

    Methods inherited from interface org.refcodes.component.Openable.OpenAutomaton

    isOpenable

    Methods inherited from interface org.refcodes.component.Openable.OpenBuilder

    withOpenUnchecked

    Methods inherited from interface org.refcodes.serial.SegmentTransmitter

    flush

    Methods inherited from interface org.refcodes.serial.SerialReceiver

    receiveByte, receiveBytes, receiveSegmentWithin, receiveSequence, receiveSequenceWithin

    Methods inherited from interface org.refcodes.serial.SerialTransceiver

    receiveSegment, transmitSegment

    Methods inherited from interface org.refcodes.serial.SerialTransmitter

    flush, transmitAllBytes, transmitBytes, transmitSequence

    Methods inherited from interface org.refcodes.io.Skippable

    skipAvailable, skipAvailableExcept, skipAvailableTill, skipAvailableTillSilenceFor, skipAvailableTillSilenceFor, skipAvailableWithin, skipAvailableWithin