/** * {@inheritDoc} */ public function receiveRequest() { try { $message = $this->socket->recvMulti(); } catch (\Exception $e) { throw new TransportException('Unable to receive request', null, $e); } $this->waitingForResponse = true; $requestType = $message[0]; if (!MessageTypes::isValid($requestType)) { throw new FormatException('Invalid request type "' . $requestType . '"', $message); } $request = new Request($requestType); $request->setHeaders(new Headers(Parser::parseHeaders(@$message[1]))); if ($requestType !== MessageTypes::PING) { if (empty($message[2])) { throw new FormatException('Method name is empty', $message); } $request->setMethodName($message[2]); $arguments = array_slice($message, 3); $request->setArgumentsBody($arguments); } return $request; }