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