From 73a2f691cefa3885795d292513d9ea470fd4a752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 30 Oct 2020 01:46:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- System/Event.php | 10 +++++++--- System/Pool/Redis.php | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/System/Event.php b/System/Event.php index ca69b4c3..72272d42 100644 --- a/System/Event.php +++ b/System/Event.php @@ -187,14 +187,14 @@ class Event extends BaseObject $defaultParameter = [$defaultParameter]; } $result = call_user_func($handler, ...$defaultParameter); - if ($is_remove) { + if ($handler instanceof \Closure || $is_remove) { $this->of($name, $handler); } return $result; } - foreach ($this->_events[$name] as $event) { - [$handler, $defaultParameter] = $event; + foreach ($this->_events[$name] as $index => $event) { try { + [$handler, $defaultParameter] = $event; if (!empty($parameter)) { $defaultParameter = ArrayAccess::merge($defaultParameter, $parameter); } @@ -204,6 +204,10 @@ class Event extends BaseObject call_user_func($handler, ...$defaultParameter); } catch (\Throwable $exception) { $this->error($exception->getMessage()); + } finally { + if ($handler instanceof \Closure) { + unset($this->_events[$name][$index]); + } } } if ($is_remove) { diff --git a/System/Pool/Redis.php b/System/Pool/Redis.php index 25756d6c..98e180be 100644 --- a/System/Pool/Redis.php +++ b/System/Pool/Redis.php @@ -87,7 +87,7 @@ class Redis extends Pool private function createConnect(array $config, string $coroutineName) { $redis = new SRedis(); - if (!$redis->connect($config['host'], $config['port'], $config['timeout'])) { + if (!$redis->connect($config['host'], (int)$config['port'], $config['timeout'])) { throw new RedisConnectException(sprintf('The Redis Connect %s::%d Fail.', $config['host'], $config['port'])); } if (empty($config['auth']) || !$redis->auth($config['auth'])) {