Class StopAndWaitPacketOutputStream

java.lang.Object
java.io.OutputStream
org.refcodes.serial.PacketOutputStream
org.refcodes.serial.StopAndWaitPacketOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable, org.refcodes.mixin.BlockSizeAccessor, org.refcodes.mixin.PacketSizeAccessor, org.refcodes.numerical.EndianessAccessor, AcknowledgeMagicBytesAccessor, AcknowledgeRetryNumberAccessor, AcknowledgeSegmentPackagerAccessor, AcknowledgeTimeoutMillisAccessor, PacketLengthWidthAccessor, PacketMagicBytesAccessor, PacketSegmentPackagerAccessor, SequenceNumberAccessor, SequenceNumberConcatenateModeAccessor, SequenceNumberInitValueAccessor, SequenceNumberWidthAccessor

The StopAndWaitPacketOutputStream wraps an OutputStream and chunks any data to be written into packets with a sequence number, a block of data and a CRC checksum. An according StopAndWaitPacketInputStream then reverts the packetised data stream while performing CRC checksum validation as well as sequence number validation.
  • Constructor Details

    • StopAndWaitPacketOutputStream

      public StopAndWaitPacketOutputStream(OutputStream aOutputStream, InputStream aReturnStream, TransmissionMetrics aTransmissionMetrics)
      Constructs an according StopAndWaitPacketOutputStream instance wrapping the given OutputStream. The configuration attributes are taken from the TransmissionMetrics configuration object, though only those attributes are supported which are also supported by the other constructors!
      Parameters:
      aOutputStream - The OutputStream to be wrapped.
      aReturnStream - The InputStream for establishing a return channel (handshake with the communication partner).
      aTransmissionMetrics - The TransmissionMetrics to be used for configuring this instance.
    • StopAndWaitPacketOutputStream

      public StopAndWaitPacketOutputStream(OutputStream aOutputStream, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, org.refcodes.mixin.ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, InputStream aReturnStream, byte[] aAcknowledgeMagicBytes, int aAckRetryNumber, long aAckTimeoutInMs, SegmentPackager aAckSegmentPackager, org.refcodes.numerical.Endianess aEndianess)
      Constructs an according StopAndWaitPacketOutputStream instance wrapping the given OutputStream.
      Parameters:
      aOutputStream - The OutputStream to be wrapped.
      aBlockSize - The block size of a data block for each packet.
      aPacketLengthWidth - The width (bytes) for the number of bytes to be truncated from the last block.
      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 a Sequence from this Transmission and the decorated Transmission.
      aPacketSegmentPackager - An (optional) SegmentPackager used to modify a packet's data e.g. with a CRC checksum.
      aReturnStream - The InputStream for 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.
      aAckRetryNumber - The number of retries waiting for an ACK from the return channel.
      aAckTimeoutInMs - The timeout in milliseconds to pend till the next retry.
      aAckSegmentPackager - An (optional) SegmentPackager used to modify a ACK response data e.g. with a CRC checksum.
      aEndianess - The Endianess to use for integer (double) numbers and the like.
  • Method Details