This commit is contained in:
2021-08-05 19:14:08 +08:00
parent f7ec2b6b98
commit 7f9ae9556b
9 changed files with 175 additions and 43 deletions
+1
View File
@@ -6,6 +6,7 @@ namespace PHPSTORM_META {
use Snowflake\Di\Container; use Snowflake\Di\Container;
override(Container::get(0), map('@')); override(Container::get(0), map('@'));
override(Container::newObject(0), map('@'));
// override(\Hyperf\Utils\Context::get(0), map('@')); // override(\Hyperf\Utils\Context::get(0), map('@'));
// override(\make(0), map('@')); // override(\make(0), map('@'));
override(\di(0), map('@')); override(\di(0), map('@'));
+15 -4
View File
@@ -16,6 +16,18 @@ namespace HttpServer\Http;
class HttpHeaders class HttpHeaders
{ {
private array $_headers = [];
/**
* @param array $headers
*/
public function setHeaders(array $headers): void
{
$this->_headers = $headers;
}
/** /**
* @return array * @return array
*/ */
@@ -111,12 +123,11 @@ class HttpHeaders
*/ */
private function __handler__($name = null, $default = null): mixed private function __handler__($name = null, $default = null): mixed
{ {
/** @var \Swoole\Http\Request $context */ $headers = Context::getContext(Request::class);
$context = Context::getContext(\Swoole\Http\Request::class);
if (!empty($name)) { if (!empty($name)) {
return $context->header[$name] ?? $default; return $headers->_headers[$name] ?? $default;
} }
return $context->header; return $headers->_headers;
} }
} }
+44 -4
View File
@@ -11,7 +11,6 @@ namespace HttpServer\Http;
use Exception; use Exception;
use HttpServer\Exception\RequestException; use HttpServer\Exception\RequestException;
use JetBrains\PhpStorm\Pure;
use ReflectionException; use ReflectionException;
use Snowflake\Core\Json; use Snowflake\Core\Json;
use Snowflake\Core\Xml; use Snowflake\Core\Xml;
@@ -36,6 +35,47 @@ class HttpParams
/** @var array|null */ /** @var array|null */
private ?array $_files = []; private ?array $_files = [];
private mixed $_rawContent = '';
/**
* @param array|null $gets
*/
public function setGets(?array $gets): void
{
$this->_gets = $gets;
}
/**
* @param mixed $posts
*/
public function setPosts(mixed $posts): void
{
$this->_posts = $posts;
}
/**
* @param array|null $files
*/
public function setFiles(?array $files): void
{
$this->_files = $files;
}
/**
* @param mixed|string $rawContent
*/
public function setRawContent(mixed $rawContent, string $context_type): void
{
if (str_contains($context_type, 'json')) {
$this->_rawContent = json_decode($rawContent, true);
} else if (str_contains($context_type, 'xml')) {
$this->_rawContent = Xml::toArray($rawContent);
} else {
$this->_rawContent = $rawContent;
}
}
/** /**
* @return mixed * @return mixed
* @throws Exception * @throws Exception
@@ -414,10 +454,10 @@ class HttpParams
*/ */
private function __files__($name = null): mixed private function __files__($name = null): mixed
{ {
/** @var \Swoole\Http\Request $content */ /** @var Request $content */
$content = Context::getContext(\Swoole\Http\Request::class); $content = Context::getContext(Request::class);
if (!empty($name)) { if (!empty($name)) {
return $content->files[$name] ?? null; return $content->_f[$name] ?? null;
} }
return $content->files ?? []; return $content->files ?? [];
} }
+31 -30
View File
@@ -8,9 +8,9 @@ use Exception;
use HttpServer\Abstracts\HttpService; use HttpServer\Abstracts\HttpService;
use HttpServer\IInterface\AuthIdentity; use HttpServer\IInterface\AuthIdentity;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
use Server\RequestInterface;
use Server\ServerManager; use Server\ServerManager;
use Snowflake\Core\Json; use Snowflake\Core\Json;
use Snowflake\Snowflake;
defined('REQUEST_OK') or define('REQUEST_OK', 0); defined('REQUEST_OK') or define('REQUEST_OK', 0);
defined('REQUEST_FAIL') or define('REQUEST_FAIL', 500); defined('REQUEST_FAIL') or define('REQUEST_FAIL', 500);
@@ -30,7 +30,7 @@ defined('REQUEST_FAIL') or define('REQUEST_FAIL', 500);
* @property-read $isPackage * @property-read $isPackage
* @property-read $isReceive * @property-read $isReceive
*/ */
class Request extends HttpService class Request extends HttpService implements RequestInterface
{ {
public int $fd = 0; public int $fd = 0;
@@ -56,6 +56,8 @@ class Request extends HttpService
public int $statusCode = 200; public int $statusCode = 200;
private int $_clientId = 0;
/** @var string[] */ /** @var string[] */
private array $explode = []; private array $explode = [];
@@ -74,6 +76,26 @@ class Request extends HttpService
private ?AuthIdentity $_grant = null; private ?AuthIdentity $_grant = null;
/**
* @param $id
*/
public function setClientId($id)
{
$this->_clientId = $id;
}
/**
* @param string $request_uri
*/
public function setUri(string $request_uri)
{
$request_uri = array_filter(explode('/', $request_uri));
$this->_explode = $request_uri;
$this->_uri = '/' . implode('/', $request_uri);
}
/** /**
* @return array|null * @return array|null
* @throws Exception * @throws Exception
@@ -100,9 +122,7 @@ class Request extends HttpService
*/ */
public function getClientId(): int public function getClientId(): int
{ {
$request = Context::getContext(\Swoole\Http\Request::class); return $this->_clientId ?? 0;
return $request->fd ?? 0;
} }
@@ -119,8 +139,7 @@ class Request extends HttpService
*/ */
public function getIdentity(): ?AuthIdentity public function getIdentity(): ?AuthIdentity
{ {
$request = Context::getContext(\Swoole\Http\Request::class); return $this->_grant;
return $request->grant;
} }
/** /**
@@ -176,8 +195,7 @@ class Request extends HttpService
*/ */
public function setGrantAuthorization($value) public function setGrantAuthorization($value)
{ {
$request = Context::getContext(\Swoole\Http\Request::class); return $this->_grant = $value;
return $request->grant = $value;
} }
@@ -195,7 +213,7 @@ class Request extends HttpService
*/ */
public function getExplode(): array public function getExplode(): array
{ {
return Context::getContext(\Swoole\Http\Request::class)->explode; return $this->_explode;
} }
/** /**
@@ -212,7 +230,7 @@ class Request extends HttpService
*/ */
public function getUri(): string public function getUri(): string
{ {
return $this->headers->getRequestUri(); return $this->_uri;
} }
/** /**
@@ -417,25 +435,8 @@ class Request extends HttpService
} }
/** private array $_explode = [];
* @param \Swoole\Http\Request $request private string $_uri = '';
* @return Request
* @throws Exception
*/
public static function create(\Swoole\Http\Request $request): Request
{
$request->header = array_merge($request->header, $request->server);
$request_uri = array_filter(explode('/', $request->header['request_uri']));
$request->header['request_uri'] = '/' . implode('/', $request_uri);
$request->explode = $request_uri;
Context::setContext(\Swoole\Http\Request::class, $request);
Context::setContext(Response::class, new Response());
return Snowflake::getDi()->get(Request::class);
}
} }
+3 -2
View File
@@ -15,6 +15,7 @@ use HttpServer\IInterface\RouterInterface;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
use ReflectionException; use ReflectionException;
use Rpc\Actuator; use Rpc\Actuator;
use Server\RequestInterface;
use Snowflake\Abstracts\Config; use Snowflake\Abstracts\Config;
use Snowflake\Exception\ConfigException; use Snowflake\Exception\ConfigException;
use Snowflake\Exception\NotFindClassException; use Snowflake\Exception\NotFindClassException;
@@ -522,12 +523,12 @@ class Router extends HttpService implements RouterInterface
/** /**
* @param Request $request * @param RequestInterface $request
* @return Node|null * @return Node|null
* 树杈搜索 * 树杈搜索
* @throws RequestException * @throws RequestException
*/ */
public function Branch_search(Request $request): ?Node public function Branch_search(RequestInterface $request): ?Node
{ {
$node = $this->tree_search($request->getExplode(), $request->getMethod()); $node = $this->tree_search($request->getExplode(), $request->getMethod());
if ($node instanceof Node) { if ($node instanceof Node) {
+61
View File
@@ -0,0 +1,61 @@
<?php
namespace Server\Constrict;
use HttpServer\Http\Context;
use HttpServer\Http\HttpHeaders;
use HttpServer\Http\HttpParams;
use HttpServer\Http\Request as HttpResponse;
use HttpServer\Http\Response;
use ReflectionException;
use Server\RequestInterface;
use Snowflake\Exception\NotFindClassException;
use Snowflake\Snowflake;
/**
*
*/
class Request implements RequestInterface
{
/**
* @param $name
* @param $args
* @return mixed
*/
public function __call($name, $args)
{
return Context::getContext(HttpResponse::class)->{$name}(...$args);
}
/**
* @param \Swoole\Http\Request $request
* @return Request
* @throws ReflectionException
* @throws NotFindClassException
*/
public static function create(\Swoole\Http\Request $request): RequestInterface
{
$sRequest = new HttpResponse();
$sRequest->setUri($request->header['request_uri']);
$sRequest->setClientId($request->fd);
$sRequest->headers = new HttpHeaders();
$sRequest->headers->setHeaders(array_merge($request->header, $request->server));
$sRequest->params = new HttpParams();
$sRequest->params->setRawContent($request->rawContent(), $sRequest->headers->getContentType());
$sRequest->params->setFiles($request->files);
$sRequest->params->setPosts($request->post);
$sRequest->params->setGets($request->get);
Context::setContext(Request::class, $sRequest);
Context::setContext(Response::class, new Response());
return Snowflake::getDi()->get(Request::class);
}
}
+1 -1
View File
@@ -117,7 +117,7 @@ class HTTPServerListener extends Abstracts\Server
public function onRequest(Request $request, Response $response) public function onRequest(Request $request, Response $response)
{ {
try { try {
$node = $this->router->Branch_search(HSRequest::create($request)); $node = $this->router->Branch_search(Constrict\Request::create($request));
if (!($node instanceof Node)) { if (!($node instanceof Node)) {
throw new RequestException('<h2>HTTP 404 Not Found</h2><hr><i>Powered by Swoole</i>', 404); throw new RequestException('<h2>HTTP 404 Not Found</h2><hr><i>Powered by Swoole</i>', 404);
} }
+15
View File
@@ -0,0 +1,15 @@
<?php
namespace Server;
use HttpServer\Http\Request;
/**
*
* @mixin Request
*/
interface RequestInterface
{
}
+4 -2
View File
@@ -6,7 +6,7 @@ defined('APP_PATH') or define('APP_PATH', realpath(__DIR__ . '/../../'));
use Annotation\Annotation; use Annotation\Annotation;
use HttpServer\Http\Context; use HttpServer\Http\Context;
use HttpServer\Http\HttpParams; use HttpServer\Http\HttpParams;
use HttpServer\Http\Request; use Server\Constrict\Request;
use HttpServer\Http\Response as HttpResponse; use HttpServer\Http\Response as HttpResponse;
use HttpServer\Route\Router; use HttpServer\Route\Router;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
@@ -818,8 +818,10 @@ if (!function_exists('isService')) {
/** /**
* @param string $name * @param string $name
* @return bool * @return bool
* @throws NotFindClassException
* @throws ReflectionException
*/ */
#[Pure] function isService(string $name): bool function isService(string $name): bool
{ {
return Snowflake::app()->has($name); return Snowflake::app()->has($name);
} }