/**
  * {@inheritDoc}
  */
 public function sendResponse(Response $response)
 {
     $message = array($response->getType(), (string) $response->getHeaders());
     if (MessageTypes::isResponseTypeWithResult($response->getType())) {
         $message[2] = $response->getResultBody();
     }
     try {
         $this->socket->sendMulti($message);
         $this->waitingForResponse = false;
     } catch (\Exception $e) {
         $this->waitingForResponse = false;
         throw new TransportException('Unable to send request', null, $e);
     }
 }
Beispiel #2
0
 /**
  * @param Response $response
  * @param Request $request
  * @return mixed|null
  * @throws \Wookieb\ZorroRPC\Exception\FormatException
  */
 private function obtainResponse(Response $response, Request $request)
 {
     // woah, time to handle error
     if ($response->getType() === MessageTypes::ERROR) {
         $this->handleError($response, $request);
     }
     // check whether response type is suitable for request type
     if ($response->getType() !== self::$validResponseType[$request->getType()]) {
         $msg = sprintf('Invalid response type "%s" for request type "%s"', $response->getType(), $request->getType());
         throw new FormatException($msg, $response);
     }
     if (!MessageTypes::isResponseTypeWithResult($response->getType())) {
         return;
     }
     return $this->serializer->unserializeResult($request->getMethodName(), $response->getResultBody(), $response->getHeaders()->get('Content-Type'));
 }
Beispiel #3
0
 private function createResponse($type, $result, Response $response, Request $request)
 {
     $response->setType($type);
     $this->forwardHeaders($request, $response);
     if (!MessageTypes::isResponseTypeWithResult($type)) {
         return $response;
     }
     if ($type === MessageTypes::ERROR) {
         if ($result instanceof \Exception) {
             ExceptionChanger::clean($result);
         }
         $resultBody = $this->serializer->serializeError($request->getMethodName(), $result, $response->getHeaders()->get('content-type'));
     } else {
         $resultBody = $this->serializer->serializeResult($request->getMethodName(), $result, $response->getHeaders()->get('content-type'));
     }
     $response->setResultBody($resultBody);
     return $response;
 }
 /**
  * {@inheritDoc}
  */
 public function receiveResponse()
 {
     try {
         $result = $this->socket->recvMulti();
     } catch (\ZMQSocketException $e) {
         throw new TransportException('Cannot receive response', 0, $e);
     }
     if ($result === false) {
         throw new TimeoutException('Timeout (' . $this->getTimeout() . 's) reached');
     }
     if (!isset($result[0])) {
         throw new FormatException('Invalid response - no response type', $result);
     }
     if (!isset($result[1])) {
         throw new FormatException('Invalid response - no headers', $result);
     }
     $response = new Response($result[0]);
     $response->setHeaders(new Headers(Parser::parseHeaders($result[1])));
     if (!MessageTypes::isResponseTypeWithResult($response->getType())) {
         return $response;
     }
     if (!isset($result[2])) {
         throw new FormatException('Invalid response - no response body', $result);
     }
     return $response->setResultBody($result[2]);
 }