class Plum::ClientSession
HTTP/2 client session.
Constants
- HTTP2_DEFAULT_SETTINGS
Attributes
plum[R]
Public Class Methods
new(socket, config)
click to toggle source
# File lib/plum/client/client_session.rb, line 11 def initialize(socket, config) @socket = socket @config = config @http2_settings = HTTP2_DEFAULT_SETTINGS.merge(@config[:http2_settings]) @plum = setup_plum @responses = Set.new end
Public Instance Methods
close()
click to toggle source
# File lib/plum/client/client_session.rb, line 30 def close @closed = true @responses.each(&:_fail) @responses.clear @plum.close end
empty?()
click to toggle source
# File lib/plum/client/client_session.rb, line 26 def empty? @responses.empty? end
request(headers, body, options, &headers_cb)
click to toggle source
# File lib/plum/client/client_session.rb, line 37 def request(headers, body, options, &headers_cb) headers = { ":method" => nil, ":path" => nil, ":authority" => @config[:hostname], ":scheme" => @config[:scheme] }.merge(headers) response = Response.new(**options) @responses << response stream = @plum.open_stream stream.send_headers(headers, end_stream: !body) stream.send_data(body, end_stream: true) if body stream.on(:headers) { |resp_headers_raw| response._headers(resp_headers_raw) headers_cb.call(response) if headers_cb } stream.on(:data) { |chunk| response._chunk(chunk) check_window(stream) } stream.on(:end_stream) { response._finish @responses.delete(response) } stream.on(:stream_error) { |ex| response._fail raise ex } stream.on(:local_stream_error) { |type| response.fail raise LocalStreamError.new(type) } response end
succ()
click to toggle source
# File lib/plum/client/client_session.rb, line 20 def succ @plum << @socket.readpartial(16384) rescue => e fail(e) end
Private Instance Methods
check_window(stream)
click to toggle source
# File lib/plum/client/client_session.rb, line 88 def check_window(stream) ws = @http2_settings[:initial_window_size] stream.window_update(ws) if stream.recv_remaining_window < (ws / 2) @plum.window_update(ws) if @plum.recv_remaining_window < (ws / 2) end
fail(exception)
click to toggle source
# File lib/plum/client/client_session.rb, line 74 def fail(exception) close raise exception end
setup_plum()
click to toggle source
# File lib/plum/client/client_session.rb, line 79 def setup_plum plum = ClientConnection.new(@socket.method(:write), @http2_settings) plum.on(:connection_error) { |ex| fail(ex) } plum.window_update(@http2_settings[:initial_window_size]) plum end