@@ -236,31 +236,28 @@ internal extension URL {
236236 }
237237}
238238
239- public extension HTTPClient {
240- final class Task < Response> {
239+ extension HTTPClient {
240+ public final class Task < Response> {
241241 public let eventLoop : EventLoop
242- let future : EventLoopFuture < Response >
242+ let promise : EventLoopPromise < Response >
243243
244244 private var channel : Channel ?
245245 private var cancelled : Bool
246246 private let lock : Lock
247247
248- init ( eventLoop: EventLoop , future : EventLoopFuture < Response > ) {
248+ public init ( eventLoop: EventLoop ) {
249249 self . eventLoop = eventLoop
250- self . future = future
250+ self . promise = eventLoop . makePromise ( )
251251 self . cancelled = false
252252 self . lock = Lock ( )
253253 }
254254
255- func setChannel( _ channel: Channel ) -> Channel {
256- return self . lock. withLock {
257- self . channel = channel
258- return channel
259- }
255+ public var futureResult : EventLoopFuture < Response > {
256+ return self . promise. futureResult
260257 }
261258
262259 public func wait( ) throws -> Response {
263- return try self . future . wait ( )
260+ return try self . promise . futureResult . wait ( )
264261 }
265262
266263 public func cancel( ) {
@@ -272,8 +269,19 @@ public extension HTTPClient {
272269 }
273270 }
274271
275- public func cascade( promise: EventLoopPromise < Response > ) {
276- self . future. cascade ( to: promise)
272+ func setChannel( _ channel: Channel ) -> Channel {
273+ return self . lock. withLock {
274+ self . channel = channel
275+ return channel
276+ }
277+ }
278+
279+ func succeed( _ value: Response ) {
280+ self . promise. succeed ( value)
281+ }
282+
283+ func fail( _ error: Error ) {
284+ self . promise. fail ( error)
277285 }
278286 }
279287}
@@ -296,17 +304,15 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
296304
297305 let task : HTTPClient . Task < T . Response >
298306 let delegate : T
299- let promise : EventLoopPromise < T . Response >
300307 let redirectHandler : RedirectHandler < T . Response > ?
301308
302309 var state : State = . idle
303310 var pendingRead = false
304311 var mayRead = true
305312
306- init ( task: HTTPClient . Task < T . Response > , delegate: T , promise : EventLoopPromise < T . Response > , redirectHandler: RedirectHandler < T . Response > ? ) {
313+ init ( task: HTTPClient . Task < T . Response > , delegate: T , redirectHandler: RedirectHandler < T . Response > ? ) {
307314 self . task = task
308315 self . delegate = delegate
309- self . promise = promise
310316 self . redirectHandler = redirectHandler
311317 }
312318
@@ -347,13 +353,13 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
347353 self . delegate. didSendRequest ( task: self . task)
348354
349355 let channel = context. channel
350- self . promise . futureResult. whenComplete { _ in
356+ self . task . futureResult. whenComplete { _ in
351357 channel. close ( promise: nil )
352358 }
353359 case . failure( let error) :
354360 self . state = . end
355361 self . delegate. didReceiveError ( task: self . task, error)
356- self . promise . fail ( error)
362+ self . task . fail ( error)
357363 context. close ( promise: nil )
358364 }
359365 }
@@ -410,14 +416,14 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
410416 switch self . state {
411417 case . redirected( let head, let redirectURL) :
412418 self . state = . end
413- self . redirectHandler? . redirect ( status: head. status, to: redirectURL, promise: self . promise)
419+ self . redirectHandler? . redirect ( status: head. status, to: redirectURL, promise: self . task . promise)
414420 context. close ( promise: nil )
415421 default :
416422 self . state = . end
417423 do {
418- self . promise . succeed ( try self . delegate. didFinishRequest ( task: self . task) )
424+ self . task . succeed ( try self . delegate. didFinishRequest ( task: self . task) )
419425 } catch {
420- self . promise . fail ( error)
426+ self . task . fail ( error)
421427 }
422428 }
423429 }
@@ -433,7 +439,7 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
433439 case . failure( let error) :
434440 self . state = . end
435441 self . delegate. didReceiveError ( task: self . task, error)
436- self . promise . fail ( error)
442+ self . task . fail ( error)
437443 }
438444 }
439445
@@ -442,12 +448,12 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
442448 self . state = . end
443449 let error = HTTPClientError . readTimeout
444450 self . delegate. didReceiveError ( task: self . task, error)
445- self . promise . fail ( error)
451+ self . task . fail ( error)
446452 } else if ( event as? TaskCancelEvent ) != nil {
447453 self . state = . end
448454 let error = HTTPClientError . cancelled
449455 self . delegate. didReceiveError ( task: self . task, error)
450- self . promise . fail ( error)
456+ self . task . fail ( error)
451457 } else {
452458 context. fireUserInboundEventTriggered ( event)
453459 }
@@ -461,7 +467,7 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
461467 self . state = . end
462468 let error = HTTPClientError . remoteConnectionClosed
463469 self . delegate. didReceiveError ( task: self . task, error)
464- self . promise . fail ( error)
470+ self . task . fail ( error)
465471 }
466472 }
467473
@@ -476,12 +482,12 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
476482 default :
477483 self . state = . end
478484 self . delegate. didReceiveError ( task: self . task, error)
479- self . promise . fail ( error)
485+ self . task . fail ( error)
480486 }
481487 default :
482488 self . state = . end
483489 self . delegate. didReceiveError ( task: self . task, error)
484- self . promise . fail ( error)
490+ self . task . fail ( error)
485491 }
486492 }
487493}
@@ -556,6 +562,6 @@ internal struct RedirectHandler<T> {
556562 request. headers. remove ( name: " Proxy-Authorization " )
557563 }
558564
559- return self . execute ( request) . cascade ( promise : promise)
565+ return self . execute ( request) . futureResult . cascade ( to : promise)
560566 }
561567}
0 commit comments