channels: abstracted request buffering into #handle method

This commit is contained in:
HoneyryderChuck 2017-12-12 21:29:05 +00:00
parent aa26a0f063
commit 031d25fd02
2 changed files with 23 additions and 15 deletions

View File

@ -41,14 +41,7 @@ module HTTPX
return
end
@requests << request unless @requests.include?(request)
catch(:buffer_full) do
request.headers["connection"] ||= "keep-alive"
request.transition(:headers)
join_headers(request) if request.state == :headers
request.transition(:body)
join_body(request) if request.state == :body
request.transition(:done)
end
handle(request)
end
def reenqueue!
@ -96,6 +89,17 @@ module HTTPX
private
def handle(request)
catch(:buffer_full) do
request.headers["connection"] ||= "keep-alive"
request.transition(:headers)
join_headers(request) if request.state == :headers
request.transition(:body)
join_body(request) if request.state == :body
request.transition(:done)
end
end
def join_headers(request)
request.headers["host"] ||= request.authority
buffer = +""

View File

@ -57,13 +57,7 @@ module HTTPX
end
@streams[request] = stream
end
catch(:buffer_full) do
request.transition(:headers)
join_headers(stream, request) if request.state == :headers
request.transition(:body)
join_body(stream, request) if request.state == :body
request.transition(:done)
end
handle(request, stream)
end
def reenqueue!
@ -77,6 +71,16 @@ module HTTPX
private
def handle(request, stream)
catch(:buffer_full) do
request.transition(:headers)
join_headers(stream, request) if request.state == :headers
request.transition(:body)
join_body(stream, request) if request.state == :body
request.transition(:done)
end
end
def init_connection
@connection = HTTP2::Client.new
@connection.on(:frame, &method(:on_frame))