From d688ca175b198ecfe4de296b608f735ca1ca3b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Wed, 4 Aug 2021 10:15:18 +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 --- HttpServer/Http/Response.php | 434 +++++++++++++++++------------------ 1 file changed, 217 insertions(+), 217 deletions(-) diff --git a/HttpServer/Http/Response.php b/HttpServer/Http/Response.php index 3bb407a7..061a0a19 100644 --- a/HttpServer/Http/Response.php +++ b/HttpServer/Http/Response.php @@ -14,10 +14,7 @@ use HttpServer\Abstracts\HttpService; use HttpServer\Http\Formatter\HtmlFormatter; use HttpServer\Http\Formatter\JsonFormatter; use HttpServer\Http\Formatter\XmlFormatter; -use HttpServer\IInterface\IFormatter; -use Snowflake\Core\Help; -use Snowflake\Snowflake; -use Swoole\Coroutine; +use Snowflake\Exception\NotFindClassException; use Swoole\Http\Response as SResponse; /** @@ -27,259 +24,262 @@ use Swoole\Http\Response as SResponse; class Response extends HttpService { - const JSON = 'json'; - const XML = 'xml'; - const HTML = 'html'; + const JSON = 'json'; + const XML = 'xml'; + const HTML = 'html'; - /** @var ?string */ - public ?string $format = null; + /** @var ?string */ + public ?string $format = null; - /** @var int */ - public int $statusCode = 200; + /** @var int */ + public int $statusCode = 200; - public array $headers = []; - public array $cookies = []; + public array $headers = []; + public array $cookies = []; - private float $startTime = 0; + private float $startTime = 0; - private mixed $endData; + private mixed $endData; - const FORMAT_MAPS = [ - self::JSON => JsonFormatter::class, - self::XML => XmlFormatter::class, - self::HTML => HtmlFormatter::class - ]; + const FORMAT_MAPS = [ + self::JSON => JsonFormatter::class, + self::XML => XmlFormatter::class, + self::HTML => HtmlFormatter::class + ]; - public int $fd = 0; + public int $fd = 0; - /** - * @param $format - * @return $this - */ - public function setFormat($format): static - { - if (empty($format)) { - return $this; - } - $this->format = $format; - return $this; - } + /** + * @param $format + * @return $this + */ + public function setFormat($format): static + { + if (empty($format)) { + return $this; + } + $this->format = $format; + return $this; + } - /** - * @param $content - * @return string - */ - public function toHtml($content): string - { - $this->format = self::HTML; - return (string)$content; - } + /** + * @param $content + * @return string + */ + public function toHtml($content): string + { + $this->format = self::HTML; + return (string)$content; + } - /** - * @param $content - * @return string|bool - */ - public function toJson($content): string|bool - { - $this->format = self::JSON; - return json_encode($content, JSON_UNESCAPED_UNICODE); - } + /** + * @param $content + * @return string|bool + */ + public function toJson($content): string|bool + { + $this->format = self::JSON; + return json_encode($content, JSON_UNESCAPED_UNICODE); + } - /** - * @param $content - * @return mixed - */ - public function toXml($content): mixed - { - $this->format = self::XML; - return $content; - } + /** + * @param $content + * @return mixed + */ + public function toXml($content): mixed + { + $this->format = self::XML; + return $content; + } - /** - * @param $key - * @param $value - * @return Response - */ - public function addHeader($key, $value): static - { - $this->headers[$key] = $value; - return $this; - } + /** + * @param $key + * @param $value + * @return Response + */ + public function addHeader($key, $value): static + { + $this->headers[$key] = $value; + return $this; + } - /** - * @param $name - * @param null $value - * @param null $expires - * @param null $path - * @param null $domain - * @param null $secure - * @param null $httponly - * @param null $samesite - * @param null $priority - * @return Response - */ - public function addCookie($name, $value = null, $expires = null, $path = null, $domain = null, $secure = null, $httponly = null, $samesite = null, $priority = null): static - { - $this->cookies[] = func_get_args(); - return $this; - } + /** + * @param $name + * @param null $value + * @param null $expires + * @param null $path + * @param null $domain + * @param null $secure + * @param null $httponly + * @param null $samesite + * @param null $priority + * @return Response + */ + public function addCookie($name, $value = null, $expires = null, $path = null, $domain = null, $secure = null, $httponly = null, $samesite = null, $priority = null): static + { + $this->cookies[] = func_get_args(); + return $this; + } - /** - * @param $statusCode - */ - public function setStatusCode($statusCode) - { - $this->statusCode = $statusCode; - } + /** + * @param $statusCode + */ + public function setStatusCode($statusCode) + { + $this->statusCode = $statusCode; + } - /** - * @return string - */ - public function getResponseFormat(): string - { - return match ($this->format) { - Response::HTML => 'text/html;charset=utf-8', - Response::XML => 'application/xml;charset=utf-8', - default => 'application/json;charset=utf-8', - }; - } + /** + * @return string + */ + public function getResponseFormat(): string + { + return match ($this->format) { + Response::HTML => 'text/html;charset=utf-8', + Response::XML => 'application/xml;charset=utf-8', + default => 'application/json;charset=utf-8', + }; + } - /** - * @param mixed $context - * @param int $statusCode - * @return bool - * @throws Exception - */ - public function getBuilder(mixed $data, SResponse $response = null): static - { - if ($response != null) { - $this->configure($response); - } - return $this->setContent($data); - } + /** + * @param mixed $context + * @param int $statusCode + * @return bool + * @throws Exception + */ + public function getBuilder(mixed $data, SResponse $response = null): static + { + if ($response != null) { + $this->configure($response); + } + return $this->setContent($data); + } - /** - * @param \Swoole\Http\Response|null $response - * @throws \Exception - */ - public function configure(SResponse $response = null): static - { - $response->setStatusCode($this->statusCode); - $response->header('Content-Type', $this->getResponseFormat()); - $response->header('Run-Time', $this->getRuntime()); - if (!empty($this->headers)) { - foreach ($this->headers as $name => $header) { - $response->header($name, $header); - } - } - if (!empty($this->cookies)) { - foreach ($this->cookies as $header) { - $response->setCookie(...$header); - } - } - return $this; - } + /** + * @param \Swoole\Http\Response|null $response + * @throws \Exception + */ + public function configure(SResponse $response = null): static + { + $response->setStatusCode($this->statusCode); + $response->header('Content-Type', $this->getResponseFormat()); + $response->header('Run-Time', $this->getRuntime()); + if (!empty($this->headers)) { + foreach ($this->headers as $name => $header) { + $response->header($name, $header); + } + } + if (!empty($this->cookies)) { + foreach ($this->cookies as $header) { + $response->setCookie(...$header); + } + } + return $this; + } - /** - * @param mixed $content - */ - public function setContent(mixed $content, $statusCode = 200, $format = null): static - { - $this->endData = $content; - $this->setStatusCode($statusCode); - $this->setFormat($format); - return $this; - } + /** + * @param mixed $content + * @param int $statusCode + * @param null $format + * @return Response + */ + public function setContent(mixed $content,int $statusCode = 200, $format = null): static + { + $this->endData = $content; + $this->setStatusCode($statusCode); + $this->setFormat($format); + return $this; + } - /** - * @return string - * @throws \ReflectionException - * @throws \Snowflake\Exception\NotFindClassException - */ - public function getContent(): string - { - if (empty($this->endData) || is_string($this->endData)) { - return $this->endData; - } + /** + * @return string + * @throws \ReflectionException + * @throws NotFindClassException + */ + public function getContent(): string + { + if (empty($this->endData) || is_string($this->endData)) { + return $this->endData; + } - $class = Response::FORMAT_MAPS[$this->format] ?? HtmlFormatter::class; + $class = Response::FORMAT_MAPS[$this->format] ?? HtmlFormatter::class; - return \di($class)->send($this->endData)->getData(); - } + return \di($class)->send($this->endData)->getData(); + } - /** - * @param $url - * @param array $param - * @return int - */ - public function redirect($url, array $param = []): mixed - { - if (!empty($param)) { - $url .= '?' . http_build_query($param); - } - $url = ltrim($url, '/'); - if (!preg_match('/^http/', $url)) { - $url = '/' . $url; - } - /** @var SResponse $response */ - $response = Context::getContext('response'); - if (!empty($response)) { - return $response->redirect($url); - } - return false; - } + /** + * @param $url + * @param array $param + * @return int + */ + public function redirect($url, array $param = []): mixed + { + if (!empty($param)) { + $url .= '?' . http_build_query($param); + } + $url = ltrim($url, '/'); + if (!preg_match('/^http/', $url)) { + $url = '/' . $url; + } + /** @var SResponse $response */ + $response = Context::getContext('response'); + if (!empty($response)) { + return $response->redirect($url); + } + return false; + } - /** - * @param string $path - * @param int $offset - * @param int $limit - * @param int $sleep - * @return string - */ - public function sendFile(string $path, int $offset = 0, int $limit = 1024000, int $sleep = 0): string - { - $open = fopen($path, 'r'); + /** + * @param string $path + * @param int $offset + * @param int $limit + * @param int $sleep + * @return string + */ + public function sendFile(string $path, int $offset = 0, int $limit = 1024000, int $sleep = 0): string + { + $open = fopen($path, 'r'); - $stat = fstat($open); + $stat = fstat($open); - /** @var SResponse $response */ - $response = Context::getContext('response'); - $response->header('Content-length', $stat['size']); - while ($file = fread($open, $limit)) { - $response->write($file); - fseek($open, $offset); - if ($sleep > 0) sleep($sleep); - if ($offset >= $stat['size']) { - break; - } - $offset += $limit; - } - $response->end(); - return ''; - } + /** @var SResponse $response */ + $response = Context::getContext('response'); + $response->header('Content-length', $stat['size']); + while ($file = fread($open, $limit)) { + $response->write($file); + fseek($open, $offset); + if ($sleep > 0) sleep($sleep); + if ($offset >= $stat['size']) { + break; + } + $offset += $limit; + } + $response->end(); + return ''; + } - /** - * @return string - * @throws Exception - */ - public function getRuntime(): string - { - return sprintf('%.5f', microtime(TRUE) - request()->getStartTime()); - } + /** + * @return string + * @throws Exception + */ + public function getRuntime(): string + { + return sprintf('%.5f', microtime(TRUE) - request()->getStartTime()); + } }