122 lines
2.6 KiB
PHP
122 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace VK;
|
|
|
|
use \Exception;
|
|
use \VK\Core;
|
|
use \VK\BuildAbstract;
|
|
use \VK\Robots\RobotAbstract;
|
|
use \VK\Robots\Group;
|
|
use \VK\Robots\User;
|
|
use \VK\Browsers\BrowserAbstract;
|
|
use \VK\Proxies\ProxyAbstract;
|
|
use \VK\Captchas\CaptchaAbstract;
|
|
use \VK\Loggers\Jasmo;
|
|
|
|
/**
|
|
* Сборщик
|
|
*
|
|
* @package Builder
|
|
*
|
|
* @method public group() Создание робота-группы
|
|
* @method public user() Создание робота-пользователя
|
|
*
|
|
* @method private reg() Регистрация в ядре
|
|
*
|
|
* @author Arsen Mirzaev
|
|
*/
|
|
class Builder
|
|
{
|
|
public function __construct()
|
|
{
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Создание робота-группы
|
|
*
|
|
* @return Group
|
|
*/
|
|
public function group(): Group
|
|
{
|
|
return $this->reg(new \VK\Robots\Group());
|
|
}
|
|
|
|
/**
|
|
* Создание робота-пользователя
|
|
*
|
|
* @return User
|
|
*/
|
|
public function user(): User
|
|
{
|
|
return $this->reg(new \VK\Robots\User());
|
|
}
|
|
|
|
/**
|
|
* Регистрация в ядре
|
|
*
|
|
* @return RobotAbstract
|
|
*
|
|
* @todo Добавить создание нового процесса (многопоточность)
|
|
*/
|
|
private function reg(RobotAbstract $robot): RobotAbstract
|
|
{
|
|
// Присвоение идентификатора
|
|
$robot->id = ++Core::$robots;
|
|
|
|
// Регистрация в ядре
|
|
Core::set($robot->id, $robot);
|
|
|
|
return $robot;
|
|
}
|
|
|
|
/**
|
|
* Установка журналирования
|
|
*
|
|
* @return RobotAbstract
|
|
*
|
|
* @todo Добавить установку иного журналиста по спецификации PSR-3
|
|
*/
|
|
public function log($file = null): Builder
|
|
{
|
|
Jasmo::init()::post($file)::postErrorHandler()::postShutdownHandler();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Установка браузера
|
|
*
|
|
* @return RobotAbstract
|
|
*/
|
|
public function browser(BrowserAbstract $browser): Builder
|
|
{
|
|
$this->browser = $browser;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Установка прокси
|
|
*
|
|
* @return RobotAbstract
|
|
*/
|
|
public function proxy(ProxyAbstract $proxy): Builder
|
|
{
|
|
$this->proxy = $proxy;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Установка обработчика капч
|
|
*
|
|
* @return RobotAbstract
|
|
*/
|
|
public function captcha(CaptchaAbstract $captcha): Builder
|
|
{
|
|
$this->captcha = $captcha;
|
|
return $this;
|
|
}
|
|
}
|