Class: Async::HTTP::Protocol::HTTP2::Input
- Inherits:
-
Protocol::HTTP::Body::Writable
- Object
- Protocol::HTTP::Body::Writable
- Async::HTTP::Protocol::HTTP2::Input
- Defined in:
- lib/async/http/protocol/http2/input.rb
Overview
A writable body which requests window updates when data is read from it.
Instance Method Summary collapse
-
#initialize(stream, length) ⇒ Input
constructor
Initialize the input body.
-
#read ⇒ Object
Read the next chunk of data, requesting window updates as needed.
Constructor Details
#initialize(stream, length) ⇒ Input
Initialize the input body.
17 18 19 20 21 22 |
# File 'lib/async/http/protocol/http2/input.rb', line 17 def initialize(stream, length) super(length) @stream = stream @remaining = length end |
Instance Method Details
#read ⇒ Object
Read the next chunk of data, requesting window updates as needed.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/async/http/protocol/http2/input.rb', line 26 def read if chunk = super # If we read a chunk fron the stream, we want to extend the window if required so more data will be provided. @stream.request_window_update end # We track the expected length and check we got what we were expecting. if @remaining if chunk @remaining -= chunk.bytesize elsif @remaining > 0 raise EOFError, "Expected #{self.length} bytes, #{@remaining} bytes short!" elsif @remaining < 0 raise EOFError, "Expected #{self.length} bytes, #{@remaining} bytes over!" end end return chunk end |