object Framing
- Source
- Framing.scala
- Alphabetic
- By Inheritance
- Framing
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- class FramingException extends RuntimeException
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
- def delimiter(delimiter: ByteString, maximumFrameLength: Int, allowTruncation: Boolean = false): Flow[ByteString, ByteString, NotUsed]
Creates a Flow that handles decoding a stream of unstructured byte chunks into a stream of frames where the incoming chunk stream uses a specific byte-sequence to mark frame boundaries.
Creates a Flow that handles decoding a stream of unstructured byte chunks into a stream of frames where the incoming chunk stream uses a specific byte-sequence to mark frame boundaries.
The decoded frames will not include the separator sequence.
If there are buffered bytes (an incomplete frame) when the input stream finishes and allowTruncation is set to false then this Flow will fail the stream reporting a truncated frame.
- delimiter
The byte sequence to be treated as the end of the frame.
- maximumFrameLength
The maximum length of allowed frames while decoding. If the maximum length is exceeded this Flow will fail the stream.
- allowTruncation
If
false
, then when the last frame being decoded contains no valid delimiter this Flow fails the stream instead of returning a truncated frame.
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def lengthField(fieldLength: Int, fieldOffset: Int, maximumFrameLength: Int, byteOrder: ByteOrder, computeFrameSize: (Array[Byte], Int) => Int): Flow[ByteString, ByteString, NotUsed]
Creates a Flow that decodes an incoming stream of unstructured byte chunks into a stream of frames, assuming that incoming frames have a field that encodes their length.
Creates a Flow that decodes an incoming stream of unstructured byte chunks into a stream of frames, assuming that incoming frames have a field that encodes their length.
If the input stream finishes before the last frame has been fully decoded, this Flow will fail the stream reporting a truncated frame.
- fieldLength
The length of the "size" field in bytes
- fieldOffset
The offset of the field from the beginning of the frame in bytes
- maximumFrameLength
The maximum length of allowed frames while decoding. If the maximum length is exceeded this Flow will fail the stream. This length *includes* the header (i.e the offset and the length of the size field)
- byteOrder
The ByteOrder to be used when decoding the field
- computeFrameSize
This function can be supplied if frame size is varied or needs to be computed in a special fashion. For example, frame can have a shape like this:
[offset bytes][body size bytes][body bytes][footer bytes]
. Then computeFrameSize can be used to compute the frame size:(offset bytes, computed size) => (actual frame size)
. Actual frame size must be equal or bigger than sum offieldOffset
andfieldLength
, the operator fails otherwise. Must not mutate the given byte array.
- def lengthField(fieldLength: Int, fieldOffset: Int = 0, maximumFrameLength: Int, byteOrder: ByteOrder = ByteOrder.LITTLE_ENDIAN): Flow[ByteString, ByteString, NotUsed]
Creates a Flow that decodes an incoming stream of unstructured byte chunks into a stream of frames, assuming that incoming frames have a field that encodes their length.
Creates a Flow that decodes an incoming stream of unstructured byte chunks into a stream of frames, assuming that incoming frames have a field that encodes their length.
If the input stream finishes before the last frame has been fully decoded, this Flow will fail the stream reporting a truncated frame.
- fieldLength
The length of the "size" field in bytes
- fieldOffset
The offset of the field from the beginning of the frame in bytes
- maximumFrameLength
The maximum length of allowed frames while decoding. If the maximum length is exceeded this Flow will fail the stream. This length *includes* the header (i.e the offset and the length of the size field)
- byteOrder
The ByteOrder to be used when decoding the field
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def simpleFramingProtocol(maximumMessageLength: Int): BidiFlow[ByteString, ByteString, ByteString, ByteString, NotUsed]
Returns a BidiFlow that implements a simple framing protocol.
Returns a BidiFlow that implements a simple framing protocol. This is a convenience wrapper over Framing#lengthField and simply attaches a length field header of four bytes (using big endian encoding) to outgoing messages, and decodes such messages in the inbound direction. The decoded messages do not contain the header.
+--------------------------------+ | Framing BidiFlow | | | | +--------------------------+ | in2 ~~> | Decoding | ~~> out2 | +--------------------------+ | | | | +--------------------------+ | out1 <~~ |Encoding(Add length field)| <~~ in1 | +--------------------------+ | +--------------------------------+
This BidiFlow is useful if a simple message framing protocol is needed (for example when TCP is used to send individual messages) but no compatibility with existing protocols is necessary.
The encoded frames have the layout
[4 bytes length field, Big Endian][User Payload]
The length field encodes the length of the user payload excluding the header itself.
- maximumMessageLength
Maximum length of allowed messages. If sent or received messages exceed the configured limit this BidiFlow will fail the stream. The header attached by this BidiFlow are not included in this limit.
- def simpleFramingProtocolDecoder(maximumMessageLength: Int): Flow[ByteString, ByteString, NotUsed]
Protocol decoder that is used by Framing#simpleFramingProtocol
- def simpleFramingProtocolEncoder(maximumMessageLength: Int): Flow[ByteString, ByteString, NotUsed]
Protocol encoder that is used by Framing#simpleFramingProtocol
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])