Module org.refcodes.serial
Package org.refcodes.serial
Class StopAndWaitPacketStreamSectionDecorator<DECORATEE extends Section>
- java.lang.Object
-
- org.refcodes.serial.AbstractStopAndWaitPacketStreamTransmissionDecorator<DECORATEE>
-
- org.refcodes.serial.StopAndWaitPacketStreamSectionDecorator<DECORATEE>
-
- Type Parameters:
DECORATEE
- The decoratee type describing the according subclass to be chunked into blocks and enriched with a CRC checksum and a sequence number.
- All Implemented Interfaces:
Serializable
,org.refcodes.mixin.BlockSizeAccessor
,org.refcodes.mixin.DecorateeAccessor<DECORATEE>
,org.refcodes.mixin.LengthAccessor
,org.refcodes.mixin.PacketSizeAccessor
,org.refcodes.numerical.EndianessAccessor
,AcknowledgeMagicBytesAccessor
,AcknowledgeRetryNumberAccessor
,AcknowledgeSegmentPackagerAccessor
,AcknowledgeTimeoutInMsAccessor
,DecoratorSection<DECORATEE>
,Section
,SequenceNumberInitValueAccessor
,StopAndWaitPacketStreamTransmission
,Transmission
,Transmission.TransmissionMixin
public class StopAndWaitPacketStreamSectionDecorator<DECORATEE extends Section> extends AbstractStopAndWaitPacketStreamTransmissionDecorator<DECORATEE> implements Section, DecoratorSection<DECORATEE>
AStopAndWaitPacketStreamSectionDecorator
chunks any outgoing stream (OutputStream
) into blocks of definite length and reassembles any incoming streams (InputStream
) from blocks of definite size into a contiguous stream. Each block is enriched by a sequence number as well as a CRC checksum for error detection and error correction means. To do error correction, upon a bad CRC checksum, a feedback stream is used to request the same block (as of the sequence number) again. A "window" of blocks not been acknowledged may be buffered for out of order recovery as well as other recovery strategies.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
StopAndWaitPacketStreamSectionDecorator.Builder<DECORATEE extends Section>
Builder to buildStopAndWaitSegmentDecorator
.-
Nested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeMagicBytesAccessor
AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesBuilder<B extends AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesBuilder<B>>, AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesMutator, AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeRetryNumberAccessor
AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberBuilder<B extends AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberBuilder<B>>, AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberMutator, AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeSegmentPackagerAccessor
AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerBuilder<B extends AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerBuilder<B>>, AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerMutator, AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeTimeoutInMsAccessor
AcknowledgeTimeoutInMsAccessor.AcknowledgeTimeoutInMsBuilder<B extends AcknowledgeTimeoutInMsAccessor.AcknowledgeTimeoutInMsBuilder<B>>, AcknowledgeTimeoutInMsAccessor.AcknowledgeTimeoutInMsMutator, AcknowledgeTimeoutInMsAccessor.AcknowledgeTimeoutInMsProperty
-
Nested classes/interfaces inherited from interface org.refcodes.mixin.BlockSizeAccessor
org.refcodes.mixin.BlockSizeAccessor.BlockSizeBuilder<B extends org.refcodes.mixin.BlockSizeAccessor.BlockSizeBuilder<B>>, org.refcodes.mixin.BlockSizeAccessor.BlockSizeMutator, org.refcodes.mixin.BlockSizeAccessor.BlockSizeProperty
-
Nested classes/interfaces inherited from interface org.refcodes.mixin.DecorateeAccessor
org.refcodes.mixin.DecorateeAccessor.DecorateeBuilder<DECORATEE extends Object,B extends org.refcodes.mixin.DecorateeAccessor.DecorateeBuilder<DECORATEE,B>>, org.refcodes.mixin.DecorateeAccessor.DecorateeMutator<DECORATEE extends Object>, org.refcodes.mixin.DecorateeAccessor.DecorateeProperty<DECORATEE extends Object>
-
Nested classes/interfaces inherited from interface org.refcodes.numerical.EndianessAccessor
org.refcodes.numerical.EndianessAccessor.EndianessBuilder<B extends org.refcodes.numerical.EndianessAccessor.EndianessBuilder<B>>, org.refcodes.numerical.EndianessAccessor.EndianessMutator, org.refcodes.numerical.EndianessAccessor.EndianessProperty
-
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.mixin.PacketSizeAccessor
org.refcodes.mixin.PacketSizeAccessor.PacketSizeBuilder<B extends org.refcodes.mixin.PacketSizeAccessor.PacketSizeBuilder<B>>, org.refcodes.mixin.PacketSizeAccessor.PacketSizeMutator, org.refcodes.mixin.PacketSizeAccessor.PacketSizeProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.Section
Section.SectionMixin
-
Nested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberInitValueAccessor
SequenceNumberInitValueAccessor.SequenceNumberInitValueBuilder<B extends SequenceNumberInitValueAccessor.SequenceNumberInitValueBuilder<B>>, SequenceNumberInitValueAccessor.SequenceNumberInitValueMutator, SequenceNumberInitValueAccessor.SequenceNumberInitValueProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.Transmission
Transmission.TransmissionMixin
-
-
Field Summary
-
Fields inherited from class org.refcodes.serial.AbstractStopAndWaitPacketStreamTransmissionDecorator
_acknowledgeMagicBytes, _acknowledgeRetryNumber, _acknowledgeSegmentPackager, _acknowledgeTimeoutInMs, _blockSize, _crcChecksum, _decoratee, _endianess, _lastPacketMagicBytes, _packetLengthWidth, _packetMagicBytes, _packetSegmentPackager, _packetSize, _sequenceNumberConcatenateMode, _sequenceNumberInitValue, _sequenceNumberWidth, ACK_MAGIC_BYTES, ACK_RETRY_NUMBER, ACK_TIMEOUT_IN_MS, BLOCK_SIZE, ENDIANESS, SEQUENCE_NUMBER_INIT_VALUE, SEQUENCE_NUMBER_WIDTH
-
-
Constructor Summary
Constructors Constructor Description StopAndWaitPacketStreamSectionDecorator(DECORATEE aDecoratee, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, byte[] aLastPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, org.refcodes.mixin.ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, byte[] aAcknowledgeMagicBytes, int aAckRetryNumber, long aAckTimeoutInMs, SegmentPackager aAckSegmentPackager, org.refcodes.numerical.Endianess aEndianess)
StopAndWaitPacketStreamSectionDecorator(DECORATEE aDecoratee, TransmissionMetrics aTransmissionMetrics)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <DECORATEE extends Section>
StopAndWaitPacketStreamSectionDecorator.Builder<DECORATEE>builder()
Creates builder to buildStopAndWaitPacketStreamSectionDecorator
.void
fromTransmission(Sequence aSequence, int aOffset, int aLength)
(Re-)initializes this instance with the the givenSequence
data.void
receiveFrom(InputStream aInputStream, int aLength, OutputStream aReturnStream)
(Re-)initializes this instance by receiving the accordingSequence
from the givenInputStream
.-
Methods inherited from class org.refcodes.serial.AbstractStopAndWaitPacketStreamTransmissionDecorator
getAcknowledgeMagicBytes, getAcknowledgeRetryNumber, getAcknowledgeSegmentPackager, getAcknowledgeTimeoutInMs, getBlockSize, getCrcChecksumConcatenateMode, getDecoratee, getEndianess, getLength, getPacketSize, getSequenceNumberInitValue, getSequenceNumberWidth, toSchema, toSequence, toSimpleTypeMap, transmitTo
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.refcodes.serial.Section
fromTransmission, fromTransmission, fromTransmission, receiveFrom, receiveFrom
-
Methods inherited from interface org.refcodes.serial.Transmission
getLength, toSchema, toSequence, toSimpleTypeMap, transmitTo, transmitTo
-
-
-
-
Constructor Detail
-
StopAndWaitPacketStreamSectionDecorator
public StopAndWaitPacketStreamSectionDecorator(DECORATEE aDecoratee, TransmissionMetrics aTransmissionMetrics)
-
StopAndWaitPacketStreamSectionDecorator
public StopAndWaitPacketStreamSectionDecorator(DECORATEE aDecoratee, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, byte[] aLastPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, org.refcodes.mixin.ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, byte[] aAcknowledgeMagicBytes, int aAckRetryNumber, long aAckTimeoutInMs, SegmentPackager aAckSegmentPackager, org.refcodes.numerical.Endianess aEndianess)
-
-
Method Detail
-
fromTransmission
public void fromTransmission(Sequence aSequence, int aOffset, int aLength) throws TransmissionException
(Re-)initializes this instance with the the givenSequence
data. This method merely delegates to the decoratee and does not do any packaging as we do not have a stream which we can packetize, we have aSequence
provided.- Specified by:
fromTransmission
in interfaceSection
- Parameters:
aSequence
- TheSequence
data 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 givenSequence
cannot be processed.
-
receiveFrom
public void receiveFrom(InputStream aInputStream, int aLength, OutputStream aReturnStream) throws IOException, TransmissionException
(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 interfaceSection
- Parameters:
aInputStream
- TheInputStream
from which to read the instance's (re-)initializationSequence
from.aLength
- The length of data assigned by the byte array.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 givenInputStream
bytes cannot be processed.
-
builder
public static <DECORATEE extends Section> StopAndWaitPacketStreamSectionDecorator.Builder<DECORATEE> builder()
Creates builder to buildStopAndWaitPacketStreamSectionDecorator
.- Type Parameters:
DECORATEE
- The decoratee type describing the according subclass to be enriched.- Returns:
- The created builder.
-
-