Class: Async::HTTP::Protocol::HTTP2::Response::Stream
- Inherits:
- 
      Stream
      
        - Object
- Protocol::HTTP2::Stream
- Stream
- Async::HTTP::Protocol::HTTP2::Response::Stream
 
- Defined in:
- lib/async/http/protocol/http2/response.rb
Instance Attribute Summary collapse
- 
  
    
      #response  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute response. 
Attributes inherited from Stream
Instance Method Summary collapse
- #accept_push_promise_stream(promised_stream_id, headers) ⇒ Object
- #closed(error) ⇒ Object
- 
  
    
      #initialize  ⇒ Stream 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Stream. 
- 
  
    
      #notify!  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Notify anyone waiting on the response headers to be received (or failure). 
- 
  
    
      #receive_initial_headers(headers, end_stream)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    This should be invoked from the background reader, and notifies the task waiting for the headers that we are done. 
- 
  
    
      #wait  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Wait for the headers to be received or for stream reset. 
- #wait_for_input ⇒ Object
Methods inherited from Stream
#add_header, #finish_output, #prepare_input, #process_data, #process_headers, #receive_trailing_headers, #send_body, #update_local_window, #window_updated
Constructor Details
Instance Attribute Details
#response ⇒ Object (readonly)
Returns the value of attribute response.
| 42 43 44 | # File 'lib/async/http/protocol/http2/response.rb', line 42 def response @response end | 
Instance Method Details
#accept_push_promise_stream(promised_stream_id, headers) ⇒ Object
| 52 53 54 | # File 'lib/async/http/protocol/http2/response.rb', line 52 def accept_push_promise_stream(promised_stream_id, headers) raise ProtocolError, "Cannot accept push promise stream!" end | 
#closed(error) ⇒ Object
| 106 107 108 109 110 111 112 113 114 115 116 | # File 'lib/async/http/protocol/http2/response.rb', line 106 def closed(error) super if @response @response = nil end @exception = error notify! end | 
#notify! ⇒ Object
Notify anyone waiting on the response headers to be received (or failure).
| 89 90 91 92 93 94 | # File 'lib/async/http/protocol/http2/response.rb', line 89 def notify! if notification = @notification @notification = nil notification.signal end end | 
#receive_initial_headers(headers, end_stream) ⇒ Object
This should be invoked from the background reader, and notifies the task waiting for the headers that we are done.
| 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | # File 'lib/async/http/protocol/http2/response.rb', line 57 def receive_initial_headers(headers, end_stream) headers.each do |key, value| if key == STATUS @response.status = Integer(value) elsif key == PROTOCOL @response.protocol = value elsif key == CONTENT_LENGTH @length = Integer(value) else add_header(key, value) end end @response.headers = @headers if @response.valid? if !end_stream # We only construct the input/body if data is coming. @response.body = prepare_input(@length) elsif @response.head? @response.body = ::Protocol::HTTP::Body::Head.new(@length) end else send_reset_stream(::Protocol::HTTP2::Error::PROTOCOL_ERROR) end self.notify! return headers end | 
#wait ⇒ Object
Wait for the headers to be received or for stream reset.
| 97 98 99 100 101 102 103 104 | # File 'lib/async/http/protocol/http2/response.rb', line 97 def wait # If you call wait after the headers were already received, it should return immediately: @notification&.wait if @exception raise @exception end end | 
#wait_for_input ⇒ Object
| 44 45 46 47 48 49 50 | # File 'lib/async/http/protocol/http2/response.rb', line 44 def wait_for_input # The input isn't ready until the response headers have been received: @response.wait # There is a possible race condition if you try to access @input - it might already be closed and nil. return @response.body end |