class Async::HTTP::Protocol::HTTP2
def receive_requests(&block)
def receive_requests(&block) # emits new streams opened by the client @controller.on(:stream) do |stream| request = Request.new request.version = "HTTP/2.0" request.headers = Headers.new # stream.on(:active) { } # fires when stream transitions to open state # stream.on(:close) { } # stream is closed by client and server stream.on(:headers) do |headers| headers.each do |key, value| if key == METHOD request.method = value elsif key == PATH request.path = value elsif key == AUTHORITY request.authority = value else request.headers[key] = value end end end stream.on(:data) do |body| request.body = body end stream.on(:half_close) do response = yield request # send response stream.headers(STATUS => response[0].to_s) stream.headers(response[1]) unless response[1].empty? response[2].each do |chunk| stream.data(chunk, end_stream: false) end stream.data("", end_stream: true) end end while data = @stream.io.read(1024) @controller << data end end