diff --git a/Server/HTTPServerListener.php b/Server/HTTPServerListener.php index 84d48561..501bf3a2 100644 --- a/Server/HTTPServerListener.php +++ b/Server/HTTPServerListener.php @@ -93,7 +93,7 @@ class HTTPServerListener extends Abstracts\Server public function onRequest(Request $request, Response $response) { try { -// defer(fn() => fire(Event::SYSTEM_RESOURCE_RELEASES)); + defer(fn() => fire(Event::SYSTEM_RESOURCE_RELEASES)); [$request, $_] = [HRequest::create($request), HResponse::create($response)]; if ($request->is('favicon.ico')) { diff --git a/System/Event.php b/System/Event.php index 58f4ae90..80b57448 100644 --- a/System/Event.php +++ b/System/Event.php @@ -6,9 +6,7 @@ namespace Snowflake; use Exception; -use JetBrains\PhpStorm\Pure; use Snowflake\Abstracts\BaseObject; -use Snowflake\Core\ArrayAccess; /** * Class Event @@ -17,265 +15,259 @@ use Snowflake\Core\ArrayAccess; class Event extends BaseObject { - public bool $isVide = true; + public bool $isVide = true; - private static array $_events = []; + private static array $_events = []; - const PIPE_MESSAGE = 'SERVER:PIPE:MESSAGE'; - const TASK_FINISH = 'SERVER:TASK::FINISH'; + const PIPE_MESSAGE = 'SERVER:PIPE:MESSAGE'; + const TASK_FINISH = 'SERVER:TASK::FINISH'; - const EVENT_AFTER_REQUEST = 'SERVER:REQUEST:AFTER:START'; - const EVENT_BEFORE_REQUEST = 'SERVER:REQUEST:BEFORE:START'; - const RECEIVE_CONNECTION = 'SERVER:RECEIVE:CONNECTION'; + const EVENT_AFTER_REQUEST = 'SERVER:REQUEST:AFTER:START'; + const EVENT_BEFORE_REQUEST = 'SERVER:REQUEST:BEFORE:START'; + const RECEIVE_CONNECTION = 'SERVER:RECEIVE:CONNECTION'; - const SYSTEM_RESOURCE_RELEASES = 'SYSTEM::RESOURCE::RELEASES'; - const SYSTEM_RESOURCE_CLEAN = 'SYSTEM::RESOURCE::CLEAN'; + const SYSTEM_RESOURCE_RELEASES = 'SYSTEM::RESOURCE::RELEASES'; + const SYSTEM_RESOURCE_CLEAN = 'SYSTEM::RESOURCE::CLEAN'; - const PROCESS_WORKER_STOP = 'SERVER:PROCESS:WORKER:STOP'; + const PROCESS_WORKER_STOP = 'SERVER:PROCESS:WORKER:STOP'; - const SERVER_AFTER_RELOAD = 'SERVER:AFTER:RELOAD'; - const SERVER_BEFORE_RELOAD = 'SERVER:BEFORE:RELOAD'; - const SERVER_CONNECT = 'SERVER:CONNECT'; - const SERVER_PACKAGE = 'SERVER:PACKAGE'; - const SERVER_RECEIVE = 'SERVER:RECEIVE'; + const SERVER_AFTER_RELOAD = 'SERVER:AFTER:RELOAD'; + const SERVER_BEFORE_RELOAD = 'SERVER:BEFORE:RELOAD'; + const SERVER_CONNECT = 'SERVER:CONNECT'; + const SERVER_PACKAGE = 'SERVER:PACKAGE'; + const SERVER_RECEIVE = 'SERVER:RECEIVE'; - const SERVER_EVENT_START = 'SERVER:EVENT:START'; - const SERVER_MANAGER_START = 'SERVER:EVENT:MANAGER:START'; - const SERVER_MANAGER_STOP = 'SERVER:EVENT:MANAGER:START'; - const SERVER_WORKER_STOP = 'SERVER:EVENT:WORKER:STOP'; - const SERVER_WORKER_START = 'SERVER:EVENT:WORKER:START'; - const SERVER_AFTER_WORKER_START = 'SERVER:EVENT:AFTER:WORKER:START'; - const SERVER_BEFORE_START = 'SERVER:EVENT:BEFORE:START'; - const BEFORE_COMMAND_EXECUTE = 'COMMAND:EVENT:BEFORE:EXECUTE'; - const AFTER_COMMAND_EXECUTE = 'COMMAND:EVENT:AFTER:EXECUTE'; - const SERVER_TASK_START = 'SERVER:EVENT:TASK:START'; - const SERVER_WORKER_EXIT = 'SERVER:EVENT:WORKER:EXIT'; - const SERVER_WORKER_ERROR = 'SERVER:EVENT:WORKER:ERROR'; - const SERVER_SHUTDOWN = 'SERVER:EVENT:SHUTDOWN'; + const SERVER_EVENT_START = 'SERVER:EVENT:START'; + const SERVER_MANAGER_START = 'SERVER:EVENT:MANAGER:START'; + const SERVER_MANAGER_STOP = 'SERVER:EVENT:MANAGER:START'; + const SERVER_WORKER_STOP = 'SERVER:EVENT:WORKER:STOP'; + const SERVER_WORKER_START = 'SERVER:EVENT:WORKER:START'; + const SERVER_AFTER_WORKER_START = 'SERVER:EVENT:AFTER:WORKER:START'; + const SERVER_BEFORE_START = 'SERVER:EVENT:BEFORE:START'; + const BEFORE_COMMAND_EXECUTE = 'COMMAND:EVENT:BEFORE:EXECUTE'; + const AFTER_COMMAND_EXECUTE = 'COMMAND:EVENT:AFTER:EXECUTE'; + const SERVER_TASK_START = 'SERVER:EVENT:TASK:START'; + const SERVER_WORKER_EXIT = 'SERVER:EVENT:WORKER:EXIT'; + const SERVER_WORKER_ERROR = 'SERVER:EVENT:WORKER:ERROR'; + const SERVER_SHUTDOWN = 'SERVER:EVENT:SHUTDOWN'; - const SERVER_HANDSHAKE = 'on handshake'; - const SERVER_MESSAGE = 'on message'; - const SERVER_CLIENT_CLOSE = 'SERVER:CLIENT:CLOSE'; + const SERVER_HANDSHAKE = 'on handshake'; + const SERVER_MESSAGE = 'on message'; + const SERVER_CLIENT_CLOSE = 'SERVER:CLIENT:CLOSE'; - const SERVER_ON_START = 'Start'; - const SERVER_ON_SHUTDOWN = 'Shutdown'; - const SERVER_ON_WORKER_START = 'WorkerStart'; - const SERVER_ON_WORKER_STOP = 'WorkerStop'; - const SERVER_ON_WORKER_EXIT = 'WorkerExit'; - const SERVER_ON_CONNECT = 'Connect'; - const SERVER_ON_RECEIVE = 'Receive'; - const SERVER_ON_PACKET = 'Packet'; - const SERVER_ON_REQUEST = 'request'; - const SERVER_ON_CLOSE = 'Close'; - const SERVER_ON_TASK = 'Task'; - const SERVER_ON_FINISH = 'Finish'; - const SERVER_ON_PIPE_MESSAGE = 'PipeMessage'; - const SERVER_ON_WORKER_ERROR = 'WorkerError'; - const SERVER_ON_MANAGER_START = 'ManagerStart'; - const SERVER_ON_MANAGER_STOP = 'ManagerStop'; - const SERVER_ON_BEFORE_RELOAD = 'BeforeReload'; - const SERVER_ON_AFTER_RELOAD = 'AfterReload'; + const SERVER_ON_START = 'Start'; + const SERVER_ON_SHUTDOWN = 'Shutdown'; + const SERVER_ON_WORKER_START = 'WorkerStart'; + const SERVER_ON_WORKER_STOP = 'WorkerStop'; + const SERVER_ON_WORKER_EXIT = 'WorkerExit'; + const SERVER_ON_CONNECT = 'Connect'; + const SERVER_ON_RECEIVE = 'Receive'; + const SERVER_ON_PACKET = 'Packet'; + const SERVER_ON_REQUEST = 'request'; + const SERVER_ON_CLOSE = 'Close'; + const SERVER_ON_TASK = 'Task'; + const SERVER_ON_FINISH = 'Finish'; + const SERVER_ON_PIPE_MESSAGE = 'PipeMessage'; + const SERVER_ON_WORKER_ERROR = 'WorkerError'; + const SERVER_ON_MANAGER_START = 'ManagerStart'; + const SERVER_ON_MANAGER_STOP = 'ManagerStop'; + const SERVER_ON_BEFORE_RELOAD = 'BeforeReload'; + const SERVER_ON_AFTER_RELOAD = 'AfterReload'; - /** - * @param $name - * @param $callback - * @param array $parameter - * @param bool $isAppend - * @throws Exception - */ - public static function on($name, $callback, array $parameter = [], bool $isAppend = false) - { - if (!isset(static::$_events[$name])) { - static::$_events[$name] = []; - } - if ($callback instanceof \Closure) { - $callback = \Closure::bind($callback, Snowflake::app()); - } else if (is_array($callback) && is_string($callback[0])) { - if (!class_exists($callback[0])) { - throw new Exception('Undefined callback class.'); - } - $callback[0] = Snowflake::createObject($callback[0]); - } - if (static::exists($name, $callback)) { - return; - } - if (!empty(static::$_events[$name]) && $isAppend === true) { - array_unshift(static::$_events[$name], [$callback, $parameter]); - } else { - static::$_events[$name][] = [$callback, $parameter]; - } - } + /** + * @param $name + * @param $callback + * @param array $parameter + * @param bool $isAppend + * @throws Exception + */ + public static function on($name, $callback, array $parameter = [], bool $isAppend = false) + { + if (!isset(static::$_events[$name])) { + static::$_events[$name] = []; + } + if ($callback instanceof \Closure) { + $callback = \Closure::bind($callback, Snowflake::app()); + } else if (is_array($callback) && is_string($callback[0])) { + if (!class_exists($callback[0])) { + throw new Exception('Undefined callback class.'); + } + $callback[0] = Snowflake::createObject($callback[0]); + } + if (static::exists($name, $callback)) { + return; + } + if (!empty(static::$_events[$name]) && $isAppend === true) { + array_unshift(static::$_events[$name], [$callback, $parameter]); + } else { + static::$_events[$name][] = [$callback, $parameter]; + } + } - /** - * @param $name - * @param $callback - */ - public static function of($name, $callback): void - { - if (!isset(static::$_events[$name])) { - return; - } - foreach (static::$_events[$name] as $index => $event) { - [$handler, $parameter] = $event; - if ($handler !== $callback) { - continue; - } - unset(static::$_events[$name][$index]); - } - } + /** + * @param $name + * @param $callback + */ + public static function of($name, $callback): void + { + if (!isset(static::$_events[$name])) { + return; + } + foreach (static::$_events[$name] as $index => $event) { + [$handler, $parameter] = $event; + if ($handler !== $callback) { + continue; + } + unset(static::$_events[$name][$index]); + } + } - /** - * @param $name - * @return bool - */ - public static function offName($name): bool - { - if (!static::exists($name)) { - return true; - } - unset(static::$_events[$name]); - return static::exists($name); - } + /** + * @param $name + * @return bool + */ + public static function offName($name): bool + { + if (!static::exists($name)) { + return true; + } + unset(static::$_events[$name]); + return static::exists($name); + } - /** - * @param $name - * @param null $callback - * @return bool - */ - public static function exists($name, $callback = null): bool - { - if (!isset(static::$_events[$name])) { - return false; - } - if ($callback === null) { - return true; - } - foreach (static::$_events[$name] as $event) { - [$handler, $parameter] = $event; - if ($handler === $callback) { - return true; - } - } - return false; - } + /** + * @param $name + * @param null $callback + * @return bool + */ + public static function exists($name, $callback = null): bool + { + if (!isset(static::$_events[$name])) { + return false; + } + if ($callback === null) { + return true; + } + foreach (static::$_events[$name] as $event) { + [$handler, $parameter] = $event; + if ($handler === $callback) { + return true; + } + } + return false; + } - /** - * @param $name - * @param $handler - * @return mixed - */ - public static function get($name, $handler): mixed - { - if (!static::exists($name, $handler)) { - return null; - } + /** + * @param $name + * @param $handler + * @return mixed + */ + public static function get($name, $handler): mixed + { + if (!static::exists($name, $handler)) { + return null; + } - if (empty($handler)) { - return static::$_events[$name]; - } - foreach (static::$_events[$name] as $event) { - [$callback, $parameter] = $event; - if ($callback === $handler) { - return [$event]; - } - } - return null; - } + if (empty($handler)) { + return static::$_events[$name]; + } + foreach (static::$_events[$name] as $event) { + [$callback, $parameter] = $event; + if ($callback === $handler) { + return [$event]; + } + } + return null; + } - public static function clean() - { - static::$_events = []; - } + public static function clean() + { + static::$_events = []; + } /** * @param $name * @param array $params - * @param null $scope * @return bool * @throws Exception */ - public function dispatch($name, array $params = [], $scope = null): bool - { - return static::trigger($name, $params, $scope); - } + public function dispatch($name, array $params = []): bool + { + return static::trigger($name, $params); + } /** * @param $name * @param null $parameter - * @param null $handler * @param false $is_remove * @return bool * @throws Exception */ - public static function trigger($name, $parameter = null, $handler = null, bool $is_remove = false): bool - { - $events = static::get($name, $handler); - if (empty($events)) { - return true; - } - foreach ($events as $event) { - static::execute($event, $parameter); - } - if ($is_remove) { - static::offName($name); - } - return true; - } + public static function trigger($name, $parameter = null, bool $is_remove = false): bool + { + foreach ((static::$_events[$name] ?? []) as $event) { + static::execute($event, $parameter); + } + if ($is_remove) { + static::offName($name); + } + return true; + } - /** - * @param $event - * @param $parameter - * @return bool - * @throws Exception - */ - private static function execute($event, $parameter): bool - { - try { - $meta = static::mergeParams($event[1], $parameter); - if (call_user_func($event[0], ...$meta) === false) { - return false; - } - return true; - } catch (\Throwable $throwable) { - return logger()->addError($throwable,'throwable'); - } - } + /** + * @param $event + * @param $parameter + * @return bool + * @throws Exception + */ + private static function execute($event, $parameter): bool + { + try { + $meta = static::mergeParams($event[1], $parameter); + if (call_user_func($event[0], ...$meta) === false) { + return false; + } + return true; + } catch (\Throwable $throwable) { + return logger()->addError($throwable, 'throwable'); + } + } - /** - * @param $defaultParameter - * @param array $parameter - * @return array - */ - private static function mergeParams($defaultParameter, array $parameter = []): array - { - if (empty($defaultParameter)) { - $defaultParameter = $parameter; - } else { - if (!is_array($parameter)) { - $parameter = []; - } - foreach ($parameter as $key => $value) { - $defaultParameter[] = $value; - } - } - if (!is_array($defaultParameter)) { - $defaultParameter = [$defaultParameter]; - } - return $defaultParameter; - } + /** + * @param $defaultParameter + * @param array $parameter + * @return array + */ + private static function mergeParams($defaultParameter, array $parameter = []): array + { + if (empty($defaultParameter)) { + $defaultParameter = $parameter; + } else { + if (!is_array($parameter)) { + $parameter = []; + } + foreach ($parameter as $key => $value) { + $defaultParameter[] = $value; + } + } + if (!is_array($defaultParameter)) { + $defaultParameter = [$defaultParameter]; + } + return $defaultParameter; + } }