<?php declare(strict_types=1); namespace VK; use \VK\Core, \VK\Robots\RobotAbstract, \VK\Robots\Group, \VK\Robots\User, \VK\Loggers\Jasmo; /** * Сборщик * * @property Core $core Ядро * * @method public function __construct(Core $core = null) Инициализация * @method public function group() Создание робота-группы * @method public function user() Создание робота-пользователя * @method private function reg() Регистрация в ядре * @method public function log(string $file = null) Журналирование * * @package VK\Builder * @author Arsen Mirzaev <red@hood.su> */ class Builder { /** * Инициализация * * @param Core $core Ядро */ public function __construct(Core $core = null) { if (isset($core)) { $this->core = $core::init(); } } /** * Создание робота-группы * * @param int $id Идентификатор * * @return Group */ public function group(int $id): Group { // Создание робота $robot = new Group(); // Идентификатор $robot->id = $id; // Сессия $robot->session = isset($this->core) ? count($this->core->get($id)) : 0; return isset($this->core) ? $this->reg($robot) : $robot; } /** * Создание робота-пользователя * * @param int $id Идентификатор * * @return User */ public function user(): User { return $this->reg(new User()); } /** * Регистрация в ядре * * @param RobotAbstract $robot Регистрируемый робот * * @return RobotAbstract * * @todo Добавить создание нового процесса (многопоточность) */ private function reg(RobotAbstract $robot): RobotAbstract { // Регистрация в ядре $this->core->set((int) $robot->id, $robot); // Количество роботов ++$this->core->robots; return $robot; } /** * Журналирование * * @param string $file Файл для журналирования * * @return Builder * * @todo Добавить установку иного журналиста по спецификации PSR-3 * @todo Более гибкое журналирование */ public function log(string $file = null): Builder { // Инициализация журналиста (требует переработки) Jasmo::init()::post($file)::postErrorHandler()::postShutdownHandler(); return $this; } }