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.LengthPropertyNested classes/interfaces inherited from interface org.refcodes.serial.Segment
Segment.SegmentMixinNested 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
ConstructorsConstructorDescriptionMagicBytesSegmentMultiplexer(int aReadLimit, Segment... aSegments) MagicBytesSegmentMultiplexer(Collection<Segment> aSegments) MagicBytesSegmentMultiplexer(Collection<Segment> aSegments, int aReadLimit) MagicBytesSegmentMultiplexer(Segment... aSegments) -
Method Summary
Modifier and TypeMethodDescriptionintfromTransmission(byte[] aChunk) (Re-)initializes this instance with the the given byte array data.intfromTransmission(byte[] aChunk, int aOffset) (Re-)initializes this instance with the the given byte array data.intfromTransmission(Sequence aSequence) (Re-)initializes this instance with the the givenSequencedata.intfromTransmission(Sequence aSequence, int aOffset) (Re-)initializes this instance with the the givenSequencedata.voidreceiveFrom(InputStream aInputStream) (Re-)initializes this instance by receiving the accordingSequencefrom the givenInputStream.voidreceiveFrom(InputStream aInputStream, OutputStream aReturnStream) (Re-)initializes this instance by receiving the accordingSequencefrom the givenInputStream.voidreceiveFrom(SerialTransceiver aSerialTransceiver) (Re-)initializes this instance by receiving the accordingSequencefrom the givenSerialTransceiver'sInputStream.Methods inherited from class org.refcodes.serial.AbstractMagicBytesTransmissionMultiplexer
getCallee, getChildren, getLength, iterator, reset, toSchema, toSequence, toSimpleTypeMap, transmitTo, transmitTo, transmitToMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliteratorMethods 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:
fromTransmissionin 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 givenSequencecannot be processed.
-
fromTransmission
(Re-)initializes this instance with the the givenSequencedata.- Specified by:
fromTransmissionin interfaceSegment- Parameters:
aSequence- TheSequencedata from which to (re-)initialize this instance.- Returns:
- The index after the last offset into the given
Sequenceprocessed by this method. - Throws:
TransmissionException- thrown in case a givenSequencecannot be processed.
-
fromTransmission
(Re-)initializes this instance with the the given byte array data.- Specified by:
fromTransmissionin 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 givenSequencecannot be processed.
-
receiveFrom
(Re-)initializes this instance by receiving the accordingSequencefrom the givenInputStream. This is a convenience method in case there is no feedbackOutputStreamavailable (actually theSegment.receiveFrom(InputStream, OutputStream)method is invoked withnullfor the feedbackOutputStream). OverrideSegment.receiveFrom(InputStream, OutputStream)for your custom receiving functionality.- Specified by:
receiveFromin interfaceSegment- Parameters:
aInputStream- TheInputStreamfrom which to read the instance's (re-)initializationSequencefrom.- Throws:
IOException- thrown in case reading data from theInputStreamcaused problems.TransmissionException- thrown in case a given transmission cannot be processed.
-
receiveFrom
(Re-)initializes this instance by receiving the accordingSequencefrom the givenSerialTransceiver'sInputStream. Implementations providing error correction methods use the providedSerialTransceiver's feedbackOutputStreamto 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:
receiveFromin interfaceSegment- Parameters:
aSerialTransceiver- TheSerialTransceiverproviding theInputStreamwhere to read this instance'sSequencefrom and providing theOutputStreambeing the feedback channel to handle "stop-and-wait ARQ".- Throws:
IOException- thrown in case reading data from theInputStreamcaused problems.TransmissionException- thrown in case a given transmission cannot be processed.
-
fromTransmission
(Re-)initializes this instance with the the givenSequencedata.- Specified by:
fromTransmissionin interfaceSegment- Parameters:
aSequence- TheSequencedata 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
Sequenceprocessed by this method. - Throws:
TransmissionException- thrown in case a givenSequencecannot be processed.
-
receiveFrom
(Re-)initializes this instance by receiving the accordingSequencefrom the givenInputStream. Implementations providing error correction methods use the provided feedbackOutputStreamto do some sort of "stop-and-wait ARQ" or apply similar methods to ensure correctness of the received data.- Specified by:
receiveFromin interfaceSegment- Parameters:
aInputStream- TheInputStreamfrom which to read the instance's (re-)initializationSequencefrom.aReturnStream- AnOutputStreambeing 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 theInputStreamcaused problems.TransmissionException- thrown in case a given transmission cannot be processed.
-