class
Movie::Remote::InboundFrameReader
- Movie::Remote::InboundFrameReader
- IO
- Reference
- Object
Overview
Connection-owned read buffer that makes already-received complete frames visible to the inbound batching loop. The wrapped socket must have its own read buffering disabled so each connection retains only one input buffer.
Defined in:
movie/remote/inbound_frame_reader.crConstant Summary
-
DEFAULT_BUFFER_SIZE =
32 * 1024
Constructors
Instance Method Summary
- #buffered_bytes : Int32
-
#complete_frame_buffered? : Bool
Returns true only when the next frame can be decoded without another socket read.
-
#read(slice : Bytes) : Int32
Reads at most slice.size bytes from this
IOinto slice. -
#write(slice : Bytes) : Nil
Writes the contents of slice into this
IO.
Constructor Detail
Instance Method Detail
Returns true only when the next frame can be decoded without another socket read. Invalid length prefixes are considered ready so the decoder can reject them immediately.
Reads at most slice.size bytes from this IO into slice.
Returns the number of bytes read, which is 0 if and only if there is no
more data to read (so checking for 0 is the way to detect end of file).
io = IO::Memory.new "hello"
slice = Bytes.new(4)
io.read(slice) # => 4
slice # => Bytes[104, 101, 108, 108]
io.read(slice) # => 1
slice # => Bytes[111, 101, 108, 108]
io.read(slice) # => 0
Writes the contents of slice into this IO.
io = IO::Memory.new
slice = Bytes.new(4) { |i| ('a'.ord + i).to_u8 }
io.write(slice)
io.to_s # => "abcd"