diff --git a/src/Server.php b/src/Server.php index d31cd45..ab5b992 100644 --- a/src/Server.php +++ b/src/Server.php @@ -82,13 +82,23 @@ public function serve(WorkerInterface $worker = null, callable $finalize = null) $response = $this->invoke($call->service, $call->method, $context, $request->body); - /** @var ResponseHeaders|null $responseHeaders */ + /** @var ?ResponseHeaders $responseHeaders */ $responseHeaders = $context->getValue(ResponseHeaders::class); $responseHeadersString = $responseHeaders ? $responseHeaders->packHeaders() : '{}'; $this->workerSend($worker, $response, $responseHeadersString); } catch (GRPCExceptionInterface $e) { - $this->workerGrpcError($worker, $context, $e); + /** @var ?ResponseHeaders $responseHeaders */ + $responseHeaders = $context?->getValue(ResponseHeaders::class); + + $this->workerSend( + $worker, + '', + Json::encode([ + 'error' => $this->createGrpcError($e), + 'headers' => $responseHeaders->getHeaders(), + ]), + ); } catch (\Throwable $e) { $this->workerError($worker, $this->isDebugMode() ? (string)$e : $e->getMessage()); } finally { @@ -128,11 +138,8 @@ private function workerSend(WorkerInterface $worker, string $body, string $heade $worker->respond(new Payload($body, $headers)); } - private function workerGrpcError( - WorkerInterface $worker, - ?ContextInterface $context, - GRPCExceptionInterface $e - ): void { + private function createGrpcError(GRPCExceptionInterface $e): string + { $status = new Status([ 'code' => $e->getCode(), 'message' => $e->getMessage(), @@ -147,17 +154,7 @@ static function ($detail) { ), ]); - /** @var ?ResponseHeaders $responseHeaders */ - $responseHeaders = $context?->getValue(ResponseHeaders::class); - - $this->workerSend( - $worker, - '', - Json::encode([ - 'error' => \base64_encode($status->serializeToString()), - 'headers' => $responseHeaders->getHeaders(), - ]), - ); + return \base64_encode($status->serializeToString()); } /**