*/ 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; } }