This commit is contained in:
2021-08-27 17:22:08 +08:00
parent daef261403
commit 24bf2405a3
2 changed files with 43 additions and 9 deletions
+7 -7
View File
@@ -3,7 +3,7 @@
namespace Server\Constrict; namespace Server\Constrict;
use Http\Context\Context; use Http\Context\Context;
use Server\Message\Request as Psr7Request; use Server\Message\Request as RequestMessage;
use Http\Context\Response; use Http\Context\Response;
use Kiri\Kiri; use Kiri\Kiri;
use ReflectionException; use ReflectionException;
@@ -11,7 +11,7 @@ use Server\RequestInterface;
/** /**
* @mixin Psr7Request * @mixin RequestMessage
*/ */
class Request implements RequestInterface class Request implements RequestInterface
{ {
@@ -24,10 +24,10 @@ class Request implements RequestInterface
*/ */
public function __call($name, $args) public function __call($name, $args)
{ {
if (!Context::hasContext(Psr7Request::class)) { if (!Context::hasContext(RequestMessage::class)) {
$request = Context::setContext(Psr7Request::class, new Psr7Request()); $request = Context::setContext(RequestMessage::class, new RequestMessage());
} else { } else {
$request = Context::getContext(Psr7Request::class); $request = Context::getContext(RequestMessage::class);
} }
if (property_exists($request, $name)) { if (property_exists($request, $name)) {
return $request->{$name}; return $request->{$name};
@@ -43,7 +43,7 @@ class Request implements RequestInterface
public function __get($name): mixed public function __get($name): mixed
{ {
// TODO: Change the autogenerated stub // TODO: Change the autogenerated stub
return Context::getContext(Psr7Request::class)->{$name}; return Context::getContext(RequestMessage::class)->{$name};
} }
@@ -56,7 +56,7 @@ class Request implements RequestInterface
{ {
Context::setContext(Response::class, new Response()); Context::setContext(Response::class, new Response());
Context::setContext(Psr7Request::class, Psr7Request::parseRequest($request)); Context::setContext(RequestMessage::class, RequestMessage::parseRequest($request));
return Kiri::getDi()->get(Request::class); return Kiri::getDi()->get(Request::class);
} }
+36 -2
View File
@@ -59,8 +59,42 @@ class Request implements RequestInterface
$message->serverRequest = $request; $message->serverRequest = $request;
$message->version = $request->server['server_protocol']; $message->version = $request->server['server_protocol'];
$message->stream = new Stream($request->getContent()); $message->stream = new Stream($request->getContent());
$message->headers = $request->header; return $message->parseHeaders($request);
return $message; }
/**
* @param \Swoole\Http\Request $request
* @return $this
*/
private function parseHeaders(\Swoole\Http\Request $request): static
{
foreach ($request->header as $key => $value) {
$this->addHeader($key, $value);
}
$index = strpos("\r\n\r\n", $request->getData());
$headers = explode("\r\n", substr($request->getData(), 0, $index));
array_shift($headers);
foreach ($headers as $header) {
[$key, $value] = explode(': ', $header);
$this->addHeader($key, $value);
}
return $this;
}
/**
* @param $key
* @param $value
*/
private function addHeader($key, $value)
{
$this->headers[$key] = [];
foreach (explode(';', $value) as $item) {
$this->headers[$key][] = $item;
}
} }