- java.lang.Object
-
- org.refcodes.serial.AbstractMagicBytesTransmissionMultiplexer<Section>
-
- org.refcodes.serial.MagicBytesSectionMultiplexer
-
- All Implemented Interfaces:
Serializable,Iterable<Section>,org.refcodes.mixin.ChildrenAccessor<Section[]>,org.refcodes.mixin.LengthAccessor,Section,Transmission
public class MagicBytesSectionMultiplexer extends AbstractMagicBytesTransmissionMultiplexer<Section> implements Section, Iterable<Section>, org.refcodes.mixin.ChildrenAccessor<Section[]>
THeMagicBytesSectionMultiplexerdispatches a transmission to one of the aggregatedSectioninstances depending on the magic number provided by the transmission. A transmission is passed to each of the aggregatedSectioninstances till oneSectionaccepts the transmission, e.g. until aSectiondoes not throw aBadMagicBytesException. To enforce throwing aBadMagicBytesExceptionuse a magic bytesSegmentorSectionwhich enforces the magic bytes to of a transmission to match its own magic bytes, e.e. use one of the following:AssertMagicBytesSectionDecorator,AssertMagicBytesSegment,AssertMagicBytesSegmentDecoratorAttention: ASectionthrowing aTransmissionExceptionother than aBadMagicBytesExceptionis considered to be responsible for the transmission so that dispatching is *not* continued with the succeedingSection! The lastSectionwhich was responsible for a transmission's magic bytes will be the responsibleSectiontill anotherSectionclaims responsibility for a transmsision's magic bytes. Initially the firstSectionpassed to this instance is the responsibleSection.- See Also:
- Serialized Form
-
-
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.Section
Section.SectionMixin
-
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
Constructors Constructor Description MagicBytesSectionMultiplexer()MagicBytesSectionMultiplexer(int aReadLimit, Section... aSections)MagicBytesSectionMultiplexer(Collection<Section> aSections)MagicBytesSectionMultiplexer(Collection<Section> aSections, int aReadLimit)MagicBytesSectionMultiplexer(Section... aSections)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidfromTransmission(byte[] aChunk, int aLength)(Re-)initializes this instance with the the given byte array data.voidfromTransmission(byte[] aChunk, int aOffset, int aLength)(Re-)initializes this instance with the the given byte array data.voidfromTransmission(Sequence aSequence, int aLength)(Re-)initializes this instance with the the givenSequencedata.voidfromTransmission(Sequence aSequence, int aOffset, int aLength)(Re-)initializes this instance with the the givenSequencedata.voidreceiveFrom(InputStream aInputStream, int aLength)(Re-)initializes this instance by receiving the accordingSequencefrom the givenInputStream.voidreceiveFrom(InputStream aInputStream, int aLength, OutputStream aReturnStream)(Re-)initializes this instance by receiving the accordingSequencefrom the givenInputStream.voidreceiveFrom(SerialTransceiver aSerialTransceiver, int aLength)(Re-)initializes this instance by receiving the accordingSequencefrom the givenSerialTransceiver'sInputStream.-
Methods inherited from class org.refcodes.serial.AbstractMagicBytesTransmissionMultiplexer
getCallee, getChildren, getLength, iterator, 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, iterator, spliterator
-
Methods inherited from interface org.refcodes.serial.Transmission
getLength, toSchema, toSequence, toSimpleTypeMap, transmitTo, transmitTo, transmitTo
-
-
-
-
Constructor Detail
-
MagicBytesSectionMultiplexer
public MagicBytesSectionMultiplexer()
-
MagicBytesSectionMultiplexer
public MagicBytesSectionMultiplexer(Collection<Section> aSections, int aReadLimit)
-
MagicBytesSectionMultiplexer
public MagicBytesSectionMultiplexer(Collection<Section> aSections)
-
MagicBytesSectionMultiplexer
public MagicBytesSectionMultiplexer(int aReadLimit, Section... aSections)
-
MagicBytesSectionMultiplexer
public MagicBytesSectionMultiplexer(Section... aSections)
-
-
Method Detail
-
fromTransmission
public void fromTransmission(byte[] aChunk, int aLength) throws TransmissionException(Re-)initializes this instance with the the given byte array data.- Specified by:
fromTransmissionin interfaceSection- Parameters:
aChunk- The byte array data from which to (re-)initialize this instance.aLength- The length of data assigned by the byte array.- Throws:
TransmissionException- thrown in case a givenSequencecannot be processed.
-
fromTransmission
public void fromTransmission(Sequence aSequence, int aLength) throws TransmissionException
(Re-)initializes this instance with the the givenSequencedata.- Specified by:
fromTransmissionin interfaceSection- Parameters:
aSequence- TheSequencedata from which to (re-)initialize this instance.aLength- The length of data assigned by theSequence.- Throws:
TransmissionException- thrown in case a givenSequencecannot be processed.
-
fromTransmission
public void fromTransmission(byte[] aChunk, int aOffset, int aLength) throws TransmissionException(Re-)initializes this instance with the the given byte array data.- Specified by:
fromTransmissionin interfaceSection- Parameters:
aChunk- The byte array data from which to (re-)initialize this instance.aOffset- The offset where to start processing the provided byte array.aLength- The length of data assigned by the byte array.- Throws:
TransmissionException- thrown in case a givenSequencecannot be processed.
-
receiveFrom
public void receiveFrom(InputStream aInputStream, int aLength) throws IOException, TransmissionException
(Re-)initializes this instance by receiving the accordingSequencefrom the givenInputStream. This is a convenience method in case there is no feedbackOutputStreamavailable (actually theSection.receiveFrom(InputStream, int, OutputStream )method is invoked withnullfor the feedbackOutputStream). OverrideSection.receiveFrom(InputStream, int, OutputStream)for your custom receiving functionality.- Specified by:
receiveFromin interfaceSection- Parameters:
aInputStream- TheInputStreamfrom which to read the instance's (re-)initializationSequencefrom.aLength- The length of data assigned by the byte array.- Throws:
IOException- thrown in case reading data from theInputStreamcaused problems.TransmissionException- thrown in case a givenInputStreambytes cannot be processed.
-
receiveFrom
public void receiveFrom(SerialTransceiver aSerialTransceiver, int aLength) throws IOException, TransmissionException
(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 theSection.receiveFrom(InputStream, int, OutputStream )method is invoked). OverrideSection.receiveFrom(InputStream, int, OutputStream)for your custom receiving functionality.- Specified by:
receiveFromin interfaceSection- Parameters:
aSerialTransceiver- TheSerialTransceiverproviding theInputStreamwhere to read this instance'sSequencefrom and providing theOutputStreambeing the feedback channel to handle "stop-and-wait ARQ".aLength- The length of data assigned by the byte array.- Throws:
IOException- thrown in case reading data from theInputStreamcaused problems.TransmissionException- thrown in case a givenInputStreambytes cannot be processed.
-
fromTransmission
public void fromTransmission(Sequence aSequence, int aOffset, int aLength) throws TransmissionException
(Re-)initializes this instance with the the givenSequencedata.- Specified by:
fromTransmissionin interfaceSection- Parameters:
aSequence- TheSequencedata from which to (re-)initialize this instance.aOffset- The offset where to start processing the providedSequence.aLength- The length of data assigned by theSequence.- Throws:
TransmissionException- thrown in case a givenSequencecannot be processed.
-
receiveFrom
public void receiveFrom(InputStream aInputStream, int aLength, OutputStream aReturnStream) throws IOException, TransmissionException
(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 interfaceSection- Parameters:
aInputStream- TheInputStreamfrom which to read the instance's (re-)initializationSequencefrom.aLength- The length of data assigned by the byte array.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 givenInputStreambytes cannot be processed.
-
-