class Async::HTTP::Protocol::HTTP2
def call(request)
def call(request) request.version ||= self.version stream = @controller.new_stream headers = { SCHEME => HTTPS, METHOD => request.method.to_s, PATH => request.path.to_s, AUTHORITY => request.authority.to_s, }.merge(request.headers) finished = Async::Notification.new response = Response.new response.version = self.version response.headers = {} body = Body::Writable.new response.body = body stream.on(:headers) do |headers| headers.each do |key, value| if key == STATUS response.status = value.to_i elsif key == REASON response.reason = value else response.headers[key] = value end end finished.signal end stream.on(:data) do |chunk| body.write(chunk.to_s) unless chunk.empty? end stream.on(:close) do body.finish end if request.body.empty? stream.headers(headers, end_stream: true) else stream.headers(headers, end_stream: false) request.body.each do |chunk| stream.data(chunk, end_stream: false) end stream.data("", end_stream: true) end start_connection @stream.flush # Async.logger.debug(self) {"Stream flushed, waiting for signal."} finished.wait # Async.logger.debug(self) {"Stream finished: #{response.inspect}"} return response end