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;
override(Container::get(0), map('@'));
override(Container::newObject(0), map('@'));
// override(\Hyperf\Utils\Context::get(0), map('@'));
// override(\make(0), map('@'));
override(\di(0), map('@'));
+15 -4
View File
@@ -16,6 +16,18 @@ namespace HttpServer\Http;
class HttpHeaders
{
private array $_headers = [];
/**
* @param array $headers
*/
public function setHeaders(array $headers): void
{
$this->_headers = $headers;
}
/**
* @return array
*/
@@ -111,12 +123,11 @@ class HttpHeaders
*/
private function __handler__($name = null, $default = null): mixed
{
/** @var \Swoole\Http\Request $context */
$context = Context::getContext(\Swoole\Http\Request::class);
$headers = Context::getContext(Request::class);
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 HttpServer\Exception\RequestException;
use JetBrains\PhpStorm\Pure;
use ReflectionException;
use Snowflake\Core\Json;
use Snowflake\Core\Xml;
@@ -36,6 +35,47 @@ class HttpParams
/** @var array|null */
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
* @throws Exception
@@ -414,10 +454,10 @@ class HttpParams
*/
private function __files__($name = null): mixed
{
/** @var \Swoole\Http\Request $content */
$content = Context::getContext(\Swoole\Http\Request::class);
/** @var Request $content */
$content = Context::getContext(Request::class);
if (!empty($name)) {
return $content->files[$name] ?? null;
return $content->_f[$name] ?? null;
}
return $content->files ?? [];
}
+31 -30
View File
@@ -8,9 +8,9 @@ use Exception;
use HttpServer\Abstracts\HttpService;
use HttpServer\IInterface\AuthIdentity;
use JetBrains\PhpStorm\Pure;
use Server\RequestInterface;
use Server\ServerManager;
use Snowflake\Core\Json;
use Snowflake\Snowflake;
defined('REQUEST_OK') or define('REQUEST_OK', 0);
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 $isReceive
*/
class Request extends HttpService
class Request extends HttpService implements RequestInterface
{
public int $fd = 0;
@@ -56,6 +56,8 @@ class Request extends HttpService
public int $statusCode = 200;
private int $_clientId = 0;
/** @var string[] */
private array $explode = [];
@@ -74,6 +76,26 @@ class Request extends HttpService
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
* @throws Exception
@@ -100,9 +122,7 @@ class Request extends HttpService
*/
public function getClientId(): int
{
$request = Context::getContext(\Swoole\Http\Request::class);
return $request->fd ?? 0;
return $this->_clientId ?? 0;
}
@@ -119,8 +139,7 @@ class Request extends HttpService
*/
public function getIdentity(): ?AuthIdentity
{
$request = Context::getContext(\Swoole\Http\Request::class);
return $request->grant;
return $this->_grant;
}
/**
@@ -176,8 +195,7 @@ class Request extends HttpService
*/
public function setGrantAuthorization($value)
{
$request = Context::getContext(\Swoole\Http\Request::class);
return $request->grant = $value;
return $this->_grant = $value;
}
@@ -195,7 +213,7 @@ class Request extends HttpService
*/
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
{
return $this->headers->getRequestUri();
return $this->_uri;
}
/**
@@ -417,25 +435,8 @@ class Request extends HttpService
}
/**
* @param \Swoole\Http\Request $request
* @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);
}
private array $_explode = [];
private string $_uri = '';
}
+3 -2
View File
@@ -15,6 +15,7 @@ use HttpServer\IInterface\RouterInterface;
use JetBrains\PhpStorm\Pure;
use ReflectionException;
use Rpc\Actuator;
use Server\RequestInterface;
use Snowflake\Abstracts\Config;
use Snowflake\Exception\ConfigException;
use Snowflake\Exception\NotFindClassException;
@@ -522,12 +523,12 @@ class Router extends HttpService implements RouterInterface
/**
* @param Request $request
* @param RequestInterface $request
* @return Node|null
* 树杈搜索
* @throws RequestException
*/
public function Branch_search(Request $request): ?Node
public function Branch_search(RequestInterface $request): ?Node
{
$node = $this->tree_search($request->getExplode(), $request->getMethod());
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)
{
try {
$node = $this->router->Branch_search(HSRequest::create($request));
$node = $this->router->Branch_search(Constrict\Request::create($request));
if (!($node instanceof Node)) {
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 HttpServer\Http\Context;
use HttpServer\Http\HttpParams;
use HttpServer\Http\Request;
use Server\Constrict\Request;
use HttpServer\Http\Response as HttpResponse;
use HttpServer\Route\Router;
use JetBrains\PhpStorm\Pure;
@@ -818,8 +818,10 @@ if (!function_exists('isService')) {
/**
* @param string $name
* @return bool
* @throws NotFindClassException
* @throws ReflectionException
*/
#[Pure] function isService(string $name): bool
function isService(string $name): bool
{
return Snowflake::app()->has($name);
}