From 93ae8809028cd8a39b715ae50cf3038c41911a2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=91=E6=9E=97?= Date: Thu, 23 Jun 2022 13:44:32 +0800 Subject: [PATCH] modify plugin name --- .../Reload/{Scaner.php => Scanner.php} | 61 +++++++++++-------- 1 file changed, 37 insertions(+), 24 deletions(-) rename kiri-engine/Reload/{Scaner.php => Scanner.php} (66%) diff --git a/kiri-engine/Reload/Scaner.php b/kiri-engine/Reload/Scanner.php similarity index 66% rename from kiri-engine/Reload/Scaner.php rename to kiri-engine/Reload/Scanner.php index 2b121254..e857bf6f 100644 --- a/kiri-engine/Reload/Scaner.php +++ b/kiri-engine/Reload/Scanner.php @@ -11,13 +11,13 @@ use Kiri\Server\ServerInterface; use Psr\Log\LoggerInterface; use Swoole\Process; -class Scaner extends BaseProcess +class Scanner extends BaseProcess { private array $md5Map = []; public bool $isReloading = FALSE; - + public string $name = 'hot reload'; @@ -49,38 +49,51 @@ class Scaner extends BaseProcess */ private function loadDirs(bool $isReload = FALSE) { - foreach ($this->dirs as $value) { - $value = new DirectoryIterator($value); - if ($value->isDot() || str_starts_with($value->getFilename(), '.')) { - continue; - } - if ($value->isDir()) { - $this->loadByDir($value, $isReload); + try { + foreach ($this->dirs as $value) { + $value = new DirectoryIterator($value); + if ($value->isDir()) { + $this->loadByDir($value, $isReload); + } } + } catch (\Throwable $throwable) { + $this->logger->error($throwable->getMessage(), [$throwable]); } } /** - * @param DirectoryIterator $path + * @param DirectoryIterator $iterator * @param bool $isReload * @return void * @throws Exception */ - private function loadByDir(DirectoryIterator $path, bool $isReload = FALSE): void + private function loadByDir(DirectoryIterator $iterator, bool $isReload = FALSE): void { - if ($path->isDir()) { - $this->loadByDir(new DirectoryIterator($path->getRealPath()), $isReload); - } - if (!str_ends_with($path->getFilename(), '.php')) { - return; - } - if ($this->checkFile($path, $isReload)) { + foreach ($iterator as $path) { if ($this->isReloading) { return; } - $this->isReloading = TRUE; - sleep(2); + /** @var DirectoryIterator $path */ + + if ($path->isDot() || str_starts_with($path->getFilename(), '.')) { + continue; + } + + if ($path->getExtension() !== 'php') { + continue; + } + + if ($path->isDir()) { + $this->loadByDir(new DirectoryIterator($path->getRealPath()), $isReload); + } + + if ($this->checkFile($path, $isReload)) { + $this->isReloading = TRUE; + break; + } + } + if ($this->isReloading) { $this->timerReload(); } } @@ -93,8 +106,8 @@ class Scaner extends BaseProcess */ private function checkFile(DirectoryIterator $value, $isReload): bool { - $md5 = md5_file($value->getRealPath()); - $mTime = $value->getCTime(); + $md5 = md5($value->getRealPath()); + $mTime = filectime($value->getRealPath()); if (!isset($this->md5Map[$md5])) { if ($isReload) { return TRUE; @@ -125,10 +138,10 @@ class Scaner extends BaseProcess $swow->reload(); - $this->loadDirs(); - $this->isReloading = FALSE; + $this->loadDirs(); + $this->tick(); }