/**
  * {@inheritdoc}
  */
 public function call(LocationInterface $location, Request $request)
 {
     $this->dispatcher->dispatch(CallEvent::NAME, new CallEvent($location, $request));
     $promise = $this->driver->call($location, $request);
     return new Response\Promise(function ($timeout) use($location, $request, $promise) {
         $response = $promise->resolve($timeout);
         $this->dispatcher->dispatch(ReplyEvent::NAME, new ReplyEvent($location, $request, $response));
         return $response;
     });
 }
 /**
  * {@inheritdoc}
  */
 public function call(Request $request)
 {
     return $this->driver->call($this->location, $request);
 }
 /**
  * {@inheritdoc}
  */
 public function call(LocationInterface $location, Request $request)
 {
     return $this->syncDriver->call($location, $request);
 }