java.lang.Object
org.refcodes.serial.AbstractMagicBytesTransmissionMultiplexer<Segment>
org.refcodes.serial.MagicBytesSegmentMultiplexer
- All Implemented Interfaces:
Serializable
,Iterable<Segment>
,org.refcodes.mixin.ChildrenAccessor<Segment[]>
,org.refcodes.mixin.LengthAccessor
,org.refcodes.mixin.Resetable
,org.refcodes.schema.Schemable
,Segment
,Transmission
public class MagicBytesSegmentMultiplexer
extends AbstractMagicBytesTransmissionMultiplexer<Segment>
implements Segment
THe
MagicBytesSegmentMultiplexer
dispatches a transmission to one of
the aggregated Segment
instances depending on the magic number
provided by the transmission. A transmission is passed to each of the
aggregated Segment
instances till one Segment
accepts the
transmission, e.g. until a Segment
does not throw a
BadMagicBytesException
. To enforce throwing a
BadMagicBytesException
use a magic bytes Segment
or
Section
which enforces the magic bytes to of a transmission to match
its own magic bytes, e.e. use one of the following:
AssertMagicBytesSectionDecorator
, AssertMagicBytesSegment
,
AssertMagicBytesSegmentDecorator
Attention: A Segment
throwing a TransmissionException
other than a
BadMagicBytesException
is considered to be responsible for the
transmission so that dispatching is *not* continued with the succeeding
Segment
! The last Segment
which was responsible for a
transmission's magic bytes will be the responsible Segment
till
another Segment
claims responsibility for a transmsision's magic
bytes. Initially the first Segment
passed to this instance is the
responsible Segment
.- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.refcodes.mixin.ChildrenAccessor
org.refcodes.mixin.ChildrenAccessor.ChildrenBuilder<T extends Object,
B extends org.refcodes.mixin.ChildrenAccessor.ChildrenBuilder<T, B>>, org.refcodes.mixin.ChildrenAccessor.ChildrenMutator<T extends Object>, org.refcodes.mixin.ChildrenAccessor.ChildrenProperty<T extends Object> Nested classes/interfaces inherited from interface org.refcodes.mixin.LengthAccessor
org.refcodes.mixin.LengthAccessor.LengthBuilder<B extends org.refcodes.mixin.LengthAccessor.LengthBuilder<B>>, org.refcodes.mixin.LengthAccessor.LengthMutator, org.refcodes.mixin.LengthAccessor.LengthProperty
Nested classes/interfaces inherited from interface org.refcodes.serial.Segment
Segment.SegmentMixin
Nested classes/interfaces inherited from interface org.refcodes.serial.Transmission
Transmission.TransmissionMixin
-
Field Summary
Fields inherited from class org.refcodes.serial.AbstractMagicBytesTransmissionMultiplexer
_children, _readLimit, _responsibility, DEFAULT_READ_LIMIT
-
Constructor Summary
ConstructorDescriptionMagicBytesSegmentMultiplexer
(int aReadLimit, Segment... aSegments) MagicBytesSegmentMultiplexer
(Collection<Segment> aSegments) MagicBytesSegmentMultiplexer
(Collection<Segment> aSegments, int aReadLimit) MagicBytesSegmentMultiplexer
(Segment... aSegments) -
Method Summary
Modifier and TypeMethodDescriptionint
fromTransmission
(byte[] aChunk) (Re-)initializes this instance with the the given byte array data.int
fromTransmission
(byte[] aChunk, int aOffset) (Re-)initializes this instance with the the given byte array data.int
fromTransmission
(Sequence aSequence) (Re-)initializes this instance with the the givenSequence
data.int
fromTransmission
(Sequence aSequence, int aOffset) (Re-)initializes this instance with the the givenSequence
data.void
receiveFrom
(InputStream aInputStream) (Re-)initializes this instance by receiving the accordingSequence
from the givenInputStream
.void
receiveFrom
(InputStream aInputStream, OutputStream aReturnStream) (Re-)initializes this instance by receiving the accordingSequence
from the givenInputStream
.void
receiveFrom
(SerialTransceiver aSerialTransceiver) (Re-)initializes this instance by receiving the accordingSequence
from the givenSerialTransceiver
'sInputStream
.Methods inherited from class org.refcodes.serial.AbstractMagicBytesTransmissionMultiplexer
getCallee, getChildren, getLength, iterator, reset, toSchema, toSequence, toSimpleTypeMap, transmitTo, transmitTo, transmitTo
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
Methods inherited from interface org.refcodes.serial.Transmission
getLength, reset, toSchema, toSequence, toSimpleTypeMap, transmitTo, transmitTo, transmitTo
-
Constructor Details
-
MagicBytesSegmentMultiplexer
public MagicBytesSegmentMultiplexer() -
MagicBytesSegmentMultiplexer
-
MagicBytesSegmentMultiplexer
-
MagicBytesSegmentMultiplexer
-
MagicBytesSegmentMultiplexer
-
-
Method Details
-
fromTransmission
(Re-)initializes this instance with the the given byte array data.- Specified by:
fromTransmission
in interfaceSegment
- Parameters:
aChunk
- The byte array data from which to (re-)initialize this instance.- Returns:
- The index after the last offset into the given byte array processed by this method.
- Throws:
TransmissionException
- thrown in case a givenSequence
cannot be processed.
-
fromTransmission
(Re-)initializes this instance with the the givenSequence
data.- Specified by:
fromTransmission
in interfaceSegment
- Parameters:
aSequence
- TheSequence
data from which to (re-)initialize this instance.- Returns:
- The index after the last offset into the given
Sequence
processed by this method. - Throws:
TransmissionException
- thrown in case a givenSequence
cannot be processed.
-
fromTransmission
(Re-)initializes this instance with the the given byte array data.- Specified by:
fromTransmission
in interfaceSegment
- Parameters:
aChunk
- The byte array data from which to (re-)initialize this instance.aOffset
- The offset where to start processing the provided byte array.- Returns:
- The index after the last offset into the given byte array processed by this method.
- Throws:
TransmissionException
- thrown in case a givenSequence
cannot be processed.
-
receiveFrom
(Re-)initializes this instance by receiving the accordingSequence
from the givenInputStream
. This is a convenience method in case there is no feedbackOutputStream
available (actually theSegment.receiveFrom(InputStream, OutputStream)
method is invoked withnull
for the feedbackOutputStream
). OverrideSegment.receiveFrom(InputStream, OutputStream)
for your custom receiving functionality.- Specified by:
receiveFrom
in interfaceSegment
- Parameters:
aInputStream
- TheInputStream
from which to read the instance's (re-)initializationSequence
from.- Throws:
IOException
- thrown in case reading data from theInputStream
caused problems.TransmissionException
- thrown in case a given transmission cannot be processed.
-
receiveFrom
(Re-)initializes this instance by receiving the accordingSequence
from the givenSerialTransceiver
'sInputStream
. Implementations providing error correction methods use the providedSerialTransceiver
's feedbackOutputStream
to do some sort of "stop-and-wait ARQ" or apply similar methods to ensure correctness of the received data. This is a convenience method (actually theSegment.receiveFrom(InputStream, OutputStream)
method is invoked). OverrideSegment.receiveFrom(InputStream, OutputStream)
for your custom receiving functionality.- Specified by:
receiveFrom
in interfaceSegment
- Parameters:
aSerialTransceiver
- TheSerialTransceiver
providing theInputStream
where to read this instance'sSequence
from and providing theOutputStream
being the feedback channel to handle "stop-and-wait ARQ".- Throws:
IOException
- thrown in case reading data from theInputStream
caused problems.TransmissionException
- thrown in case a given transmission cannot be processed.
-
fromTransmission
(Re-)initializes this instance with the the givenSequence
data.- Specified by:
fromTransmission
in interfaceSegment
- Parameters:
aSequence
- TheSequence
data from which to (re-)initialize this instance.aOffset
- The offset where to start processing the providedSequence
.- Returns:
- The index after the last offset into the given
Sequence
processed by this method. - Throws:
TransmissionException
- thrown in case a givenSequence
cannot be processed.
-
receiveFrom
(Re-)initializes this instance by receiving the accordingSequence
from the givenInputStream
. Implementations providing error correction methods use the provided feedbackOutputStream
to do some sort of "stop-and-wait ARQ" or apply similar methods to ensure correctness of the received data.- Specified by:
receiveFrom
in interfaceSegment
- Parameters:
aInputStream
- TheInputStream
from which to read the instance's (re-)initializationSequence
from.aReturnStream
- AnOutputStream
being the return channel to handle "stop-and-wait ARQ" or the like in case of a bidirectional connection. Can be null in case we have a unidirectional connection.- Throws:
IOException
- thrown in case reading data from theInputStream
caused problems.TransmissionException
- thrown in case a given transmission cannot be processed.
-