java.lang.Object
java.io.InputStream
org.refcodes.serial.PacketInputStream
org.refcodes.serial.StopAndWaitPacketInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable,org.refcodes.mixin.BlockSizeAccessor,org.refcodes.mixin.PacketSizeAccessor,org.refcodes.numerical.EndianessAccessor,AcknowledgeMagicBytesAccessor,AcknowledgeRetryNumberAccessor,AcknowledgeSegmentPackagerAccessor,AcknowledgeTimeoutMillisAccessor,PacketLengthWidthAccessor,PacketMagicBytesAccessor,PacketSegmentPackagerAccessor,SequenceNumberAccessor,SequenceNumberConcatenateModeAccessor,SequenceNumberInitValueAccessor,SequenceNumberWidthAccessor
public class StopAndWaitPacketInputStream
extends PacketInputStream
implements AcknowledgeRetryNumberAccessor, AcknowledgeTimeoutMillisAccessor, AcknowledgeMagicBytesAccessor, AcknowledgeSegmentPackagerAccessor
The
StopAndWaitPacketInputStream wraps an InputStream and
chunks any data to be written into packets with a sequence number and a block
of data. An according StopAndWaitPacketInputStream then reverts the
packetised data stream while performing sequence number validation. A
SegmentPackager can be used to add functionality such as CRC checksum
support.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder to buildStopAndWaitPacketInputStreaminstances.Nested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeMagicBytesAccessor
AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesBuilder<B extends AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesBuilder<B>>, AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesMutator, AcknowledgeMagicBytesAccessor.AcknowledgeMagicBytesPropertyNested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeRetryNumberAccessor
AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberBuilder<B extends AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberBuilder<B>>, AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberMutator, AcknowledgeRetryNumberAccessor.AcknowledgeRetryNumberPropertyNested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeSegmentPackagerAccessor
AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerBuilder<B extends AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerBuilder<B>>, AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerMutator, AcknowledgeSegmentPackagerAccessor.AcknowledgeSegmentPackagerPropertyNested classes/interfaces inherited from interface org.refcodes.serial.AcknowledgeTimeoutMillisAccessor
AcknowledgeTimeoutMillisAccessor.AcknowledgeTimeoutMillisBuilder<B extends AcknowledgeTimeoutMillisAccessor.AcknowledgeTimeoutMillisBuilder<B>>, AcknowledgeTimeoutMillisAccessor.AcknowledgeTimeoutMillisMutator, AcknowledgeTimeoutMillisAccessor.AcknowledgeTimeoutMillisPropertyNested 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.BlockSizePropertyNested 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.EndianessPropertyNested classes/interfaces inherited from interface org.refcodes.serial.PacketLengthWidthAccessor
PacketLengthWidthAccessor.PacketLengthWidthBuilder<B extends PacketLengthWidthAccessor.PacketLengthWidthBuilder<B>>, PacketLengthWidthAccessor.PacketLengthWidthMutator, PacketLengthWidthAccessor.PacketLengthWidthPropertyNested classes/interfaces inherited from interface org.refcodes.serial.PacketMagicBytesAccessor
PacketMagicBytesAccessor.PacketMagicBytesBuilder<B extends PacketMagicBytesAccessor.PacketMagicBytesBuilder<B>>, PacketMagicBytesAccessor.PacketMagicBytesMutator, PacketMagicBytesAccessor.PacketMagicBytesPropertyNested classes/interfaces inherited from interface org.refcodes.serial.PacketSegmentPackagerAccessor
PacketSegmentPackagerAccessor.PacketSegmentPackagerBuilder<B extends PacketSegmentPackagerAccessor.PacketSegmentPackagerBuilder<B>>, PacketSegmentPackagerAccessor.PacketSegmentPackagerMutator, PacketSegmentPackagerAccessor.PacketSegmentPackagerPropertyNested 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.PacketSizePropertyNested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberAccessor
SequenceNumberAccessor.SequenceNumberBuilder<B extends SequenceNumberAccessor.SequenceNumberBuilder<B>>, SequenceNumberAccessor.SequenceNumberMutator, SequenceNumberAccessor.SequenceNumberPropertyNested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberConcatenateModeAccessor
SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeBuilder<B extends SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeBuilder<B>>, SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeMutator, SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModePropertyNested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberInitValueAccessor
SequenceNumberInitValueAccessor.SequenceNumberInitValueBuilder<B extends SequenceNumberInitValueAccessor.SequenceNumberInitValueBuilder<B>>, SequenceNumberInitValueAccessor.SequenceNumberInitValueMutator, SequenceNumberInitValueAccessor.SequenceNumberInitValuePropertyNested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberWidthAccessor
SequenceNumberWidthAccessor.SequenceNumberWidthBuilder<B extends SequenceNumberWidthAccessor.SequenceNumberWidthBuilder<B>>, SequenceNumberWidthAccessor.SequenceNumberWidthMutator, SequenceNumberWidthAccessor.SequenceNumberWidthProperty -
Field Summary
Fields inherited from class org.refcodes.serial.PacketInputStream
_allocSegment, _blockOffset, _boundedSequence, _inputStream, _packetSegment, _sequenceNumber, _sequenceNumberInitValue, _sequenceNumberSegment -
Constructor Summary
ConstructorsConstructorDescriptionStopAndWaitPacketInputStream(InputStream aInputStream, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, org.refcodes.mixin.ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, OutputStream aReturnStream, byte[] aAcknowledgeMagicBytes, int aAcknowledgeRetryNumber, long aAcknowledgeTimeoutInMs, SegmentPackager aAckSegmentPackager, org.refcodes.numerical.Endianess aEndianess) Constructs an accordingStopAndWaitPacketInputStreaminstance wrapping the givenOutputStream.StopAndWaitPacketInputStream(InputStream aInputStream, OutputStream aReturnStream, TransmissionMetrics aTransmissionMetrics) Constructs an accordingStopAndWaitPacketInputStreaminstance wrapping the givenOutputStream. -
Method Summary
Modifier and TypeMethodDescriptionbuilder()Creates builder to buildStopAndWaitPacketInputStream.protected voidDo receive packet.byte[]Retrieves the magic bytes from the acknowledge magic bytes property.intRetrieves the number of retries from the acknowledge retry number.Retrieves theSegmentPackagerACK property.longThe acknowledge timeout attribute in milliseconds.Methods inherited from class org.refcodes.serial.PacketInputStream
available, close, getBlockSize, getEndianess, getPacketLengthWidth, getPacketMagicBytes, getPacketSegmentPackager, getPacketSize, getSequenceNumber, getSequenceNumberConcatenateMode, getSequenceNumberInitValue, getSequenceNumberWidth, mark, markSupported, read, resetMethods inherited from class java.io.InputStream
nullInputStream, read, read, readAllBytes, readNBytes, readNBytes, skip, skipNBytes, transferTo
-
Constructor Details
-
StopAndWaitPacketInputStream
public StopAndWaitPacketInputStream(InputStream aInputStream, OutputStream aReturnStream, TransmissionMetrics aTransmissionMetrics) Constructs an accordingStopAndWaitPacketInputStreaminstance wrapping the givenOutputStream. The configuration attributes are taken from theTransmissionMetricsconfiguration object, though only those attributes are supported which are also supported by the other constructors!- Parameters:
aInputStream- TheInputStreamto be wrapped.aReturnStream- TheOutputStreamfor establishing a return channel (handshake with the communication partner).aTransmissionMetrics- TheTransmissionMetricsto be used for configuring this instance.
-
StopAndWaitPacketInputStream
public StopAndWaitPacketInputStream(InputStream aInputStream, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, org.refcodes.mixin.ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, OutputStream aReturnStream, byte[] aAcknowledgeMagicBytes, int aAcknowledgeRetryNumber, long aAcknowledgeTimeoutInMs, SegmentPackager aAckSegmentPackager, org.refcodes.numerical.Endianess aEndianess) Constructs an accordingStopAndWaitPacketInputStreaminstance wrapping the givenOutputStream.- Parameters:
aInputStream- TheInputStreamto be wrapped.aBlockSize- The block size of a data block for each packet.aPacketLengthWidth- The width (bytes) for declaring the (max) length of a package.aPacketMagicBytes- The magic bytes identifying a packet and distinguishing a packet from a last package.aSequenceNumberInitValue- The initial sequence number from where to start counting the blocks.aSequenceNumberWidth- The width (in bytes) to be used for sequence number values.aSequenceNumberConcatenateMode- The mode of concatenation to use when creating aSequencefrom thisTransmissionand the decoratedTransmission.aPacketSegmentPackager- An (optional)SegmentPackagerused to modify a packet's data e.g. with a CRC checksum.aReturnStream- TheOutputStreamfor establishing a return channel (handshake with the communication partner).aAcknowledgeMagicBytes- The ACK character(s) to be used by the return channel to transmit an ACK (acknowledge) response after successful receiving a transmission.aAcknowledgeRetryNumber- The number of retries waiting for an ACK from the return channel.aAcknowledgeTimeoutInMs- The timeout in milliseconds to pend till the next retry.aAckSegmentPackager- An (optional)SegmentPackagerused to modify a ACK response data e.g. with a CRC checksum.aEndianess- TheEndianessto use for integer (double) numbers and the like.
-
-
Method Details
-
builder
Creates builder to buildStopAndWaitPacketInputStream.- Returns:
- created builder
-
getAcknowledgeMagicBytes
public byte[] getAcknowledgeMagicBytes()Retrieves the magic bytes from the acknowledge magic bytes property.- Specified by:
getAcknowledgeMagicBytesin interfaceAcknowledgeMagicBytesAccessor- Returns:
- The magic bytes stored by the acknowledge magic bytes property.
-
getAcknowledgeRetryNumber
public int getAcknowledgeRetryNumber()Retrieves the number of retries from the acknowledge retry number. A acknowledge retry number is the overall number of retries to use when counting retries.- Specified by:
getAcknowledgeRetryNumberin interfaceAcknowledgeRetryNumberAccessor- Returns:
- The number of retries stored by the acknowledge retry number.
-
getAcknowledgeSegmentPackager
Retrieves theSegmentPackagerACK property.- Specified by:
getAcknowledgeSegmentPackagerin interfaceAcknowledgeSegmentPackagerAccessor- Returns:
- The
SegmentPackagerstored by the ACKSegmentPackagerproperty.
-
getAcknowledgeTimeoutMillis
public long getAcknowledgeTimeoutMillis()The acknowledge timeout attribute in milliseconds.- Specified by:
getAcknowledgeTimeoutMillisin interfaceAcknowledgeTimeoutMillisAccessor- Returns:
- An long integer with the timeout in milliseconds.
-
doReceivePacket
Do receive packet.- Overrides:
doReceivePacketin classPacketInputStream- Throws:
IOException- Signals that an I/O exception has occurred.
-