Files
kiri-router/src/SwooleHttpResponseEmitter.php
T

76 lines
2.0 KiB
PHP
Raw Normal View History

2023-04-15 23:29:27 +08:00
<?php
2023-04-16 01:24:30 +08:00
declare(strict_types=1);
2023-04-15 23:29:27 +08:00
namespace Kiri\Router;
2023-04-15 23:31:16 +08:00
use Exception;
2023-04-24 10:54:56 +08:00
use Kiri\Di\Interface\ResponseEmitterInterface;
2023-08-16 01:01:47 +08:00
use Kiri\Server\Events\OnAfterRequest;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
2023-04-15 23:31:16 +08:00
use Psr\Http\Message\ResponseInterface;
2023-08-16 01:01:47 +08:00
use ReflectionException;
2023-04-15 23:31:16 +08:00
2023-10-17 16:25:29 +08:00
/**
* Swoole Http Response Emitter
*/
2023-04-24 14:23:24 +08:00
class SwooleHttpResponseEmitter implements ResponseEmitterInterface
2023-04-15 23:29:27 +08:00
{
2023-04-15 23:31:16 +08:00
2023-08-16 01:01:47 +08:00
/**
* @param Response $proxy
* @param object $response
2023-10-17 14:50:46 +08:00
* @param object $request
2023-08-16 01:01:47 +08:00
* @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ReflectionException
*/
2023-10-17 14:50:46 +08:00
public function sender(ResponseInterface $proxy, object $response, object $request): void
{
// TODO: Implement sender() method.
$this->writeParams($proxy, $response, $request);
2023-04-15 23:31:16 +08:00
2023-10-17 14:50:46 +08:00
$proxy->end($response);
2023-08-16 01:01:47 +08:00
2023-10-17 21:06:47 +08:00
// event(new OnAfterRequest());
2023-08-16 01:01:47 +08:00
}
2023-04-15 23:31:16 +08:00
2023-10-17 14:50:46 +08:00
/**
* @param Response $proxy
* @param object $response
* @param object $request
* @return void
*/
private function writeParams(ResponseInterface $proxy, object $response, object $request): void
{
$response->setStatusCode($proxy->getStatusCode());
$headers = $proxy->getHeaders();
2023-10-17 16:24:11 +08:00
if (count($headers) > 0) foreach ($headers as $name => $header) {
$response->header($name, $header);
2023-10-17 14:50:46 +08:00
}
$cookieParams = $proxy->getCookieParams();
2023-10-17 16:24:11 +08:00
if (count($cookieParams) > 0) foreach ($cookieParams as $cookie) {
$response->setCookie(...$cookie);
2023-10-17 14:50:46 +08:00
}
$response->header('Run-Time', $this->getRunTime($request));
$response->header('Server', 'swoole');
$response->header('Swoole-Version', swoole_version());
}
/**
* @param object $request
* @return float
*/
protected function getRunTime(object $request): float
{
return microtime(true) - +$request->getServerParam('request_time_float');
}
2023-04-15 23:31:16 +08:00
2023-04-15 23:29:27 +08:00
}