modify
This commit is contained in:
@@ -85,9 +85,19 @@ class Annotation extends Component
|
||||
* @param string $dir
|
||||
* @throws Exception
|
||||
*/
|
||||
public function instanceDirectoryFiles(string $dir)
|
||||
public function instanceDirectoryFiles(string $dir, ?string $outPath = null)
|
||||
{
|
||||
$this->_loader->loadByDirectory($dir);
|
||||
$this->_loader->loadByDirectory($dir, $outPath);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $dir
|
||||
* @throws Exception
|
||||
*/
|
||||
public function runtime(string $dir, ?string $outPath = null)
|
||||
{
|
||||
$this->_loader->directoryRuntime($dir, $outPath);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+89
-10
@@ -142,12 +142,9 @@ class Loader extends BaseObject
|
||||
if ($path->getExtension() !== 'php') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!in_array($path->getRealPath(), $this->_directoryMap[$DIRECTORY])) {
|
||||
$this->_directoryMap[$DIRECTORY][] = $path->getRealPath();
|
||||
}
|
||||
|
||||
try {
|
||||
$this->appendFileToDirectory($path->getRealPath());
|
||||
|
||||
$replace = Snowflake::getDi()->getReflect($this->explodeFileName($path, $namespace));
|
||||
if (empty($replace) || !$replace->isInstantiable()) {
|
||||
continue;
|
||||
@@ -208,10 +205,13 @@ class Loader extends BaseObject
|
||||
* @param string $path
|
||||
* @throws Exception
|
||||
*/
|
||||
public function loadByDirectory(string $path)
|
||||
public function loadByDirectory(string $path, ?string $outPath = null)
|
||||
{
|
||||
try {
|
||||
foreach ($this->_fileMap as $fileName => $className) {
|
||||
if (str_starts_with($fileName, $outPath)) {
|
||||
continue;
|
||||
}
|
||||
if (!str_starts_with($fileName, $path)) {
|
||||
continue;
|
||||
}
|
||||
@@ -268,15 +268,46 @@ class Loader extends BaseObject
|
||||
$DIRECTORY = explode(DIRECTORY_SEPARATOR, $directoryIterator->getRealPath());
|
||||
array_pop($DIRECTORY);
|
||||
|
||||
$DIRECTORY = implode(DIRECTORY_SEPARATOR, $DIRECTORY);
|
||||
|
||||
if (!isset($this->_directoryMap[$DIRECTORY])) {
|
||||
$this->_directoryMap[$DIRECTORY] = [];
|
||||
$path = DIRECTORY_SEPARATOR;
|
||||
foreach ($DIRECTORY as $value) {
|
||||
$path = $this->makeMoneyDirectoryArray($path, $value);
|
||||
}
|
||||
return $DIRECTORY;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @param $value
|
||||
* @return string
|
||||
*/
|
||||
private function makeMoneyDirectoryArray($path, $value)
|
||||
{
|
||||
$path .= $value . DIRECTORY_SEPARATOR;
|
||||
if (!isset($this->_directoryMap[$path])) {
|
||||
$this->_directoryMap[$path] = [];
|
||||
}
|
||||
return $path;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $filePath
|
||||
*/
|
||||
public function appendFileToDirectory(string $filePath)
|
||||
{
|
||||
$DIRECTORY = explode(DIRECTORY_SEPARATOR, $filePath);
|
||||
array_pop($DIRECTORY);
|
||||
|
||||
$path = DIRECTORY_SEPARATOR;
|
||||
foreach ($DIRECTORY as $value) {
|
||||
$path = $this->makeMoneyDirectoryArray($path, $value);
|
||||
|
||||
$this->_directoryMap[$path][] = $filePath;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $Directory
|
||||
* @return array
|
||||
@@ -290,6 +321,19 @@ class Loader extends BaseObject
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $Directory
|
||||
* @param string|null $output
|
||||
*/
|
||||
public function directoryRuntime(string $Directory, ?string $output)
|
||||
{
|
||||
if (!empty($output) && isset($this->_directoryMap[$output])) {
|
||||
unset($this->_directoryMap[$output]);
|
||||
}
|
||||
$this->execute($Directory);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $filename
|
||||
* @return mixed
|
||||
@@ -301,4 +345,39 @@ class Loader extends BaseObject
|
||||
}
|
||||
return $this->_classes[$this->_fileMap[$filename]];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $directory
|
||||
*/
|
||||
private function execute(string $directory)
|
||||
{
|
||||
if (!isset($this->_directoryMap[$directory])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$directories = $this->_directoryMap[$directory];
|
||||
foreach ($directories as $className) {
|
||||
if (!isset($this->_classes[$className])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$annotations = $this->_classes[$className];
|
||||
if (isset($annotations['target']) && !empty($annotations['target'])) {
|
||||
foreach ($annotations['target'] as $value) {
|
||||
$value->execute([$annotations['handler']]);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($annotations['methods'] as $name => $attribute) {
|
||||
foreach ($attribute as $value) {
|
||||
if (!($value instanceof \Annotation\Attribute)) {
|
||||
continue;
|
||||
}
|
||||
$value->execute([$annotations['handler'], $name]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,11 +46,17 @@ class OnWorkerStart extends Callback
|
||||
$annotation->setLoader($runtime);
|
||||
|
||||
if ($worker_id >= $server->setting['worker_num']) {
|
||||
$annotation->instanceDirectoryFiles(MODEL_PATH);
|
||||
$annotation->runtime(MODEL_PATH);
|
||||
|
||||
$this->onTask($server, $worker_id);
|
||||
} else {
|
||||
$annotation->instanceDirectoryFiles(APP_PATH);
|
||||
|
||||
$start = microtime(true);
|
||||
|
||||
$annotation->runtime(CONTROLLER_PATH);
|
||||
$annotation->runtime(APP_PATH, CONTROLLER_PATH);
|
||||
|
||||
$this->error('use time ' . (microtime(true) - $start));
|
||||
|
||||
$this->onWorker($server, $worker_id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user