/** * Execute batch. * * @param Contracts\RequestExecutor $executor * * @throws Exception\JsonRpcException * * @return Jsonable|null */ public function execute(Contracts\RequestExecutor $executor) { /** @var Request[] $requests */ // $requests = array_map( // function ($requestData) { // return $this->requestFactory->createRequest($requestData); // }, $this->batch // ); $response = new BatchResponse(); foreach ($this->batch as $requestData) { $request = null; try { $request = $this->requestFactory->createRequest($requestData); $requestResponse = $executor->execute($request); if (null !== $requestResponse) { $response->add($requestResponse); } } catch (Exception\JsonRpcException $e) { $response->add(Response::constructExceptionErrorResponse($request ? $request->getId() : null, $e)); } catch (\Exception $e) { $response->add(Response::constructExceptionErrorResponse($request ? $request->getId() : null, $e)); } } return $response; }
/** * @param \Exception $e * @param Contracts\Request|null $request * * @throws Exception\InternalErrorException * * @return Response|null */ private function handleException(\Exception $e, Contracts\Request $request = null) { $handlerResult = $this->runExceptionHandlers($e, $request); if (!$handlerResult) { $this->logger->error($e); } if ($request && !$request->getId()) { return null; } if ($handlerResult instanceof Response) { return $handlerResult; } return Response::constructExceptionErrorResponse($request ? $request->getId() : null, new Exception\InternalErrorException()); }