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'])) {