This commit is contained in:
2021-03-16 10:53:40 +08:00
parent 25e4251775
commit e84e23e668
+27 -4
View File
@@ -11,6 +11,7 @@ use HttpServer\Http\Request as HRequest;
use HttpServer\Http\Response as HResponse;
use ReflectionException;
use Snowflake\Core\Json;
use Snowflake\Error\Logger;
use Snowflake\Event;
use Snowflake\Exception\ComponentException;
use Snowflake\Exception\NotFindClassException;
@@ -28,6 +29,24 @@ class OnRequest extends Callback
{
public Event $event;
public Logger $logger;
/**
* @throws Exception
*/
public function init()
{
$this->event = Snowflake::app()->getEvent();
$this->logger = Snowflake::app()->getLogger();
}
const BEFORE_REQUEST = 'beforeRequest';
const AFTER_REQUEST = 'afterRequest';
/**
* @param Request $request
* @param Response $response
@@ -36,21 +55,25 @@ class OnRequest extends Callback
*/
public function onHandler(Request $request, Response $response): mixed
{
Coroutine::defer(function () use ($request) {
fire(Event::SYSTEM_RESOURCE_RELEASES);
logger()->insert();
});
try {
$this->event->trigger(self::BEFORE_REQUEST, [$request]);
[$request, $response] = static::create($request, $response);
if (!$request->is('favicon.ico')) {
return \router()->dispatch();
}
return \send(null);
} catch (ExitException | Error | \Throwable $exception) {
if ($exception instanceof ExitException) {
return \send(Json::to($exception->getCode(), $exception->getMessage()));
}
return $this->sendErrorMessage($request, $response, $exception);
} finally {
$this->event->trigger(Event::SYSTEM_RESOURCE_RELEASES);
$this->event->trigger(self::AFTER_REQUEST, [$request]);
$this->logger->insert();
}
}