48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/restify/adapter/em.rb', line 48
def process_next
return if requests.empty?
request, writer, retried = pipeline? ? requests.shift : requests.first
begin
req = connection.send request.method.downcase,
keepalive: true,
redirects: 3,
path: request.uri.normalized_path,
query: request.uri.normalized_query,
body: request.body,
head: request.
rescue Exception => err
writer.reject err
requests.shift unless pipeline?
return
end
req.callback do
requests.shift unless pipeline?
writer.fulfill Response.new(
request,
req.last_effective_url,
req..status,
req.,
req.response
)
if req.['CONNECTION'] == 'close'
@connection = nil
@pipeline = false
end
process_next
end
req.errback do
requests.shift unless pipeline?
@connection = nil
if pipeline?
EventMachine.next_tick do
@pipeline = false
call request, writer
end
elsif !retried
EventMachine.next_tick { call request, writer }
else
begin
raise RuntimeError.new \
"(#{req.response_header.status}) #{req.error}"
rescue => e
writer.reject e
end
end
end
end
|