/**
  * {@inheritdoc}
  */
 public function call(Identity $identity, Request $request)
 {
     $this->logger->debug('Call "%method%" to service "%service%"', ['service' => $identity->getName(), 'request_method' => $request->getMethod(), 'request_arguments' => $request->getArguments(), 'request_headers' => $request->getHeaders(), 'driver' => get_class($this->driver)]);
     $promise = $this->driver->call($identity, $request);
     return new Promise(function ($timeout) use($identity, $request, $promise) {
         $response = $promise->resolve($timeout);
         $this->logger->debug('Response from "%service%"', ['service' => $identity->getName(), 'request_method' => $request->getMethod(), 'response_value' => $response->getValue(), 'response_headers' => $response->getHeaders(), 'driver' => get_class($this->driver)]);
         return $response;
     });
 }
 /**
  * @param Request $request
  *
  * @return Message
  */
 protected function createRequest(Request $request)
 {
     $arguments = $request->getArguments();
     $encoded = $this->getEncoder()->encode($arguments);
     return new Message($encoded->getBody(), ['content-type' => $encoded->getType(), 'message-id' => uniqid('', true), 'timestamp' => time(), 'headers' => array_merge($request->getHeaders(), ['topic' => $request->getMethod()])]);
 }
 /**
  * {@inheritdoc}
  */
 public function broadcast(Request $request)
 {
     $this->logger->debug('New broadcast "%method%"', ['request_method' => $request->getMethod(), 'request_arguments' => $request->getArguments(), 'request_headers' => $request->getHeaders(), 'broadcaster' => get_class($this->broadcaster)]);
     $this->broadcaster->broadcast($request);
 }