From ed44026f121565bb5d1eb48cd5572e2b5fafc8f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 24 Sep 2021 18:16:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-handler/Abstracts/Handler.php | 148 ++++++++++++++--------------- http-server/Service/Http.php | 4 +- 2 files changed, 74 insertions(+), 78 deletions(-) diff --git a/http-handler/Abstracts/Handler.php b/http-handler/Abstracts/Handler.php index d1f12bbf..26b0113b 100644 --- a/http-handler/Abstracts/Handler.php +++ b/http-handler/Abstracts/Handler.php @@ -2,7 +2,6 @@ namespace Http\Handler\Abstracts; -use Annotation\Inject; use Http\Handler\Handler as CHl; use Http\Message\ServerRequest; use Kiri\Core\Help; @@ -19,95 +18,94 @@ abstract class Handler implements RequestHandlerInterface { - protected AspectProxy $aspectProxy; + protected AspectProxy $aspectProxy; - /** - * @param CHl $handler - * @param Iterator $middlewares - */ - public function __construct(public CHl $handler, public Iterator $middlewares) - { - $this->aspectProxy = Kiri::getDi()->get(AspectProxy::class); - } + /** + * @param CHl $handler + * @param null|Iterator $middlewares + */ + public function __construct(public CHl $handler, public ?Iterator $middlewares) + { + $this->aspectProxy = Kiri::getDi()->get(AspectProxy::class); + } - /** - * @param ServerRequestInterface $request - * @return ResponseInterface - * @throws \Exception - */ - protected function execute(ServerRequestInterface $request): ResponseInterface - { - $middleware = $this->middlewares->current(); - if (empty($middleware)) { - return $this->dispatcher($request); - } - if (!($middleware instanceof MiddlewareInterface)) { - throw new \Exception('get_implements_class($middleware) not found method process.'); - } + /** + * @param ServerRequestInterface $request + * @return ResponseInterface + * @throws \Exception + */ + protected function execute(ServerRequestInterface $request): ResponseInterface + { + if (empty($this->middlewares) || !($middleware = $this->middlewares->current())) { + return $this->dispatcher($request); + } + if (!($middleware instanceof MiddlewareInterface)) { + throw new \Exception('get_implements_class($middleware) not found method process.'); + } - $this->middlewares->next(); + $this->middlewares->next(); - return $middleware->process($request, $this); - } + return $middleware->process($request, $this); + } - /** - * @param ServerRequestInterface $request - * @return mixed - * @throws \Exception - */ - protected function dispatcher(ServerRequestInterface $request): mixed - { - $response = $this->aspectProxy->proxy($this->handler); - if (!($response instanceof ResponseInterface)) { - $response = $this->transferToResponse($response); - } - $response->withHeader('Run-Time', $this->_runTime($request)); - return $response; - } + /** + * @param ServerRequestInterface $request + * @return mixed + * @throws \Exception + */ + protected function dispatcher(ServerRequestInterface $request): mixed + { + $response = $this->aspectProxy->proxy($this->handler); + if (!($response instanceof ResponseInterface)) { + $response = $this->transferToResponse($response); + } + $response->withHeader('Run-Time', $this->_runTime($request)); + return $response; + } - /** - * @param ServerRequest $request - * @return float - */ - private function _runTime(ServerRequestInterface $request): float - { - $float = microtime(true) - time(); + /** + * @param ServerRequest $request + * @return float + */ + private function _runTime(ServerRequestInterface $request): float + { + $float = microtime(true) - time(); - $serverParams = $request->getServerParams(); + $serverParams = $request->getServerParams(); - $rTime = $serverParams['request_time_float'] - $serverParams['request_time']; + $rTime = $serverParams['request_time_float'] - $serverParams['request_time']; - return round($float - $rTime, 6); - } + return round($float - $rTime, 6); + } - /** - * @param mixed $responseData - * @return \Server\Constrict\ResponseInterface - * @throws \Exception - */ - private function transferToResponse(mixed $responseData): ResponseInterface - { - $interface = response()->withStatus(200); - if (!$interface->hasContentType()) { - $interface->withContentType('application/json;charset=utf-8'); - } - if (is_object($responseData)) { - $responseData = get_object_vars($responseData); - } - if (str_contains($interface->getContentType(), 'xml')) { - $interface->getBody()->write(Help::toXml($responseData)); - } else if (is_array($responseData)) { - $interface->getBody()->write(json_encode($responseData)); - } else { - $interface->getBody()->write((string)$responseData); - } - return $interface; - } + /** + * @param mixed $responseData + * @return \Server\Constrict\ResponseInterface + * @throws \Exception + */ + private function transferToResponse(mixed $responseData): ResponseInterface + { + $interface = response()->withStatus(200); + if (!$interface->hasContentType()) { + $interface->withContentType('application/json;charset=utf-8'); + } + if (is_object($responseData)) { + $responseData = get_object_vars($responseData); + } + if (str_contains($interface->getContentType(), 'xml')) { + $interface->getBody()->write(Help::toXml($responseData)); + } else if (is_array($responseData)) { + $interface->getBody()->write(json_encode($responseData)); + } else { + $interface->getBody()->write((string)$responseData); + } + return $interface; + } } diff --git a/http-server/Service/Http.php b/http-server/Service/Http.php index 4f6256ea..4ec93ebf 100644 --- a/http-server/Service/Http.php +++ b/http-server/Service/Http.php @@ -16,7 +16,6 @@ use Http\Message\Stream; use Kiri\Abstracts\Config; use Kiri\Exception\ConfigException; use Kiri\Kiri; -use Kiri\Pool\Helper\SplQueue; use Psr\Http\Message\ServerRequestInterface; use Server\Abstracts\Utility\EventDispatchHelper; use Server\Abstracts\Utility\ResponseHelper; @@ -115,8 +114,7 @@ class Http implements OnCloseInterface, OnConnectInterface, OnRequestInterface { $middlewares = MiddlewareManager::get($handler->callback); - - $dispatcher = new Dispatcher($handler, new Iterator($middlewares)); + $dispatcher = new Dispatcher($handler, empty($middlewares) ? null : new Iterator($middlewares)); return $dispatcher->handle($PsrRequest); }