diff --git a/src/Downloader.php b/src/Downloader.php index cea04d7..94a13cc 100644 --- a/src/Downloader.php +++ b/src/Downloader.php @@ -3,8 +3,8 @@ * @script Downloader.php * @brief wrapper for PHPCreeper.Downloader * @author blogdaren - * @version 1.0.0 - * @modify 2022-04-01 + * @version 1.0.1 + * @modify 2022-04-08 */ namespace Webman\PHPCreeper; @@ -13,31 +13,38 @@ class Downloader extends \PHPCreeper\Downloader { + /** + * @brief procuder callback + */ + const CALLBACK_MAPS = [ + 'onBeforeDownload', + 'onStartDownload', + 'onAfterDownload', + 'onDownloaderMessage', + 'onDownloaderReload', + 'onDownloaderStart', + 'onDownloaderStop', + ]; + + /** + * @brief webman worker + */ + private $_worker = null; + /** * @param array $config * - * @return null + * @return null */ public function __construct($config) { //强制使用多worker运作模式 PHPCreeper::$isRunAsMultiWorker = true; + //必须调用 parent::__construct($config); - $callback_maps = [ - 'onBeforeDownload', - 'onStartDownload', - 'onAfterDownload', - 'onDownloaderMessage', - 'onDownloaderReload', - 'onDownloaderStart', - 'onDownloaderStop', - ]; - - $this->rebindSpiderWorkerProps(); - - foreach($callback_maps as $callback) + foreach(self::CALLBACK_MAPS as $callback) { if(method_exists($this, $callback)) { @@ -46,6 +53,20 @@ public function __construct($config) } } + /** + * @brief onWorkerStart + * + * @param object $worker + * + * @return null + */ + public function onWorkerStart($worker) + { + empty($this->_worker) && $this->_worker = $worker; + $this->rebindSpiderWorkerProps(); + parent::onWorkerStart($this); + } + /** * @brief 重新绑定部分属性: InternalWorker --> SpiderWorker * @@ -53,24 +74,20 @@ public function __construct($config) */ public function rebindSpiderWorkerProps() { - $process_config = config('plugin.blogdaren.webman-phpcreeper.process'); + $this->id = $this->_worker->id; + $this->setCount($this->_worker->count); + $this->setName($this->_worker->name); + $this->setServerSocketAddress($this->_worker->getSocketName()); + //注意:context option需要透析配置文件单独绑定 + $process_config = config('plugin.blogdaren.webman-phpcreeper.process'); if(empty($process_config) || !is_array($process_config)) return $this; foreach($process_config as $name => $v) { if(!empty($v['handler']) && get_class($this) == $v['handler']) { - $this->setName($name); - - if(!empty($v['count'])) - { - $this->setCount($v['count']); - } - - !empty($v['listen']) && $this->setServerSocketAddress($v['listen']); !empty($v['context']) && $this->setServerSocketContext($v['context']); - break; } } @@ -78,7 +95,6 @@ public function rebindSpiderWorkerProps() return $this; } - } diff --git a/src/Parser.php b/src/Parser.php index 4e6487e..e6f63ae 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -3,8 +3,8 @@ * @script Parser.php * @brief wrapper for PHPCreeper.Parser * @author blogdaren - * @version 1.0.0 - * @modify 2022-04-01 + * @version 1.0.1 + * @modify 2022-04-08 */ namespace Webman\PHPCreeper; @@ -13,30 +13,37 @@ class Parser extends \PHPCreeper\Parser { + /** + * @brief procuder callback + */ + const CALLBACK_MAPS = [ + 'onParserStart', + 'onParserStop', + 'onParserReload', + 'onParserExtractField', + 'onParserFindUrl', + 'onParserMessage', + ]; + + /** + * @brief webman worker + */ + private $_worker = null; + /** * @param array $config * - * @return null + * @return null */ public function __construct($config) { //强制使用多worker运作模式 PHPCreeper::$isRunAsMultiWorker = true; + //必须调用 parent::__construct($config); - $callback_maps = [ - 'onParserStart', - 'onParserStop', - 'onParserReload', - 'onParserExtractField', - 'onParserFindUrl', - 'onParserMessage', - ]; - - $this->rebindSpiderWorkerProps(); - - foreach($callback_maps as $callback) + foreach(self::CALLBACK_MAPS as $callback) { if(method_exists($this, $callback)) { @@ -45,6 +52,20 @@ public function __construct($config) } } + /** + * @brief onWorkerStart + * + * @param object $worker + * + * @return null + */ + public function onWorkerStart($worker) + { + empty($this->_worker) && $this->_worker = $worker; + $this->rebindSpiderWorkerProps(); + parent::onWorkerStart($this); + } + /** * @brief 重新绑定部分属性: InternalWorker --> SpiderWorker * @@ -52,24 +73,20 @@ public function __construct($config) */ public function rebindSpiderWorkerProps() { - $process_config = config('plugin.blogdaren.webman-phpcreeper.process'); + $this->id = $this->_worker->id; + $this->setCount($this->_worker->count); + $this->setName($this->_worker->name); + $this->setServerSocketAddress($this->_worker->getSocketName()); + //注意:context option需要透析配置文件单独绑定 + $process_config = config('plugin.blogdaren.webman-phpcreeper.process'); if(empty($process_config) || !is_array($process_config)) return $this; foreach($process_config as $name => $v) { if(!empty($v['handler']) && get_class($this) == $v['handler']) { - $this->setName($name); - - if(!empty($v['count'])) - { - $this->setCount($v['count']); - } - - !empty($v['listen']) && $this->setServerSocketAddress($v['listen']); !empty($v['context']) && $this->setServerSocketContext($v['context']); - break; } } @@ -77,7 +94,5 @@ public function rebindSpiderWorkerProps() return $this; } - } - diff --git a/src/Producer.php b/src/Producer.php index 11128dd..53d9867 100644 --- a/src/Producer.php +++ b/src/Producer.php @@ -3,8 +3,8 @@ * @script Producer.php * @brief wrapper for PHPCreeper.Producer * @author blogdaren - * @version 1.0.0 - * @modify 2022-04-01 + * @version 1.0.1 + * @modify 2022-04-08 */ namespace Webman\PHPCreeper; @@ -13,6 +13,20 @@ class Producer extends \PHPCreeper\Producer { + /** + * @brief procuder callback + */ + const CALLBACK_MAPS = [ + 'onProducerStart', + 'onProducerStop', + 'onProducerReload', + ]; + + /** + * @brief webman worker + */ + private $_worker = null; + /** * @param array $config * @@ -23,17 +37,10 @@ public function __construct($config) //强制使用多worker运作模式 PHPCreeper::$isRunAsMultiWorker = true; + //必须调用 parent::__construct($config); - $callback_maps = [ - 'onProducerStart', - 'onProducerStop', - 'onProducerReload', - ]; - - $this->rebindSpiderWorkerProps(); - - foreach($callback_maps as $callback) + foreach(self::CALLBACK_MAPS as $callback) { if(method_exists($this, $callback)) { @@ -42,6 +49,20 @@ public function __construct($config) } } + /** + * @brief onWorkerStart + * + * @param object $worker + * + * @return null + */ + public function onWorkerStart($worker) + { + empty($this->_worker) && $this->_worker = $worker; + $this->rebindSpiderWorkerProps(); + parent::onWorkerStart($this); + } + /** * @brief 重新绑定部分属性: InternalWorker --> SpiderWorker * @@ -49,24 +70,20 @@ public function __construct($config) */ public function rebindSpiderWorkerProps() { - $process_config = config('plugin.blogdaren.webman-phpcreeper.process'); + $this->id = $this->_worker->id; + $this->setCount($this->_worker->count); + $this->setName($this->_worker->name); + $this->setServerSocketAddress($this->_worker->getSocketName()); + //注意:context option需要透析配置文件单独绑定 + $process_config = config('plugin.blogdaren.webman-phpcreeper.process'); if(empty($process_config) || !is_array($process_config)) return $this; foreach($process_config as $name => $v) { if(!empty($v['handler']) && get_class($this) == $v['handler']) { - $this->setName($name); - - if(!empty($v['count'])) - { - $this->setCount($v['count']); - } - - !empty($v['listen']) && $this->setServerSocketAddress($v['listen']); !empty($v['context']) && $this->setServerSocketContext($v['context']); - break; } }