109 lines
2.5 KiB
PHP
109 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace VK;
|
|
|
|
use \VK\Builder,
|
|
\VK\Loggers\Jasmo,
|
|
\VK\Traits\Singleton,
|
|
\VK\Traits\Registry,
|
|
\VK\Robots\RobotAbstract;
|
|
|
|
/**
|
|
* Ядро
|
|
*
|
|
* @property int $robots Количество роботов
|
|
* @property string $timezone Временная зона (журналирование)
|
|
* @property array $path Пути (архитектура проекта)
|
|
*
|
|
* @method protected static function __construct() Инициализация
|
|
* @method public static function init() Запуск инициализации или получение инстанции
|
|
* @method public public function build() Сборщик
|
|
* @method public function set($id, $value) Запись в реестр
|
|
* @method public function get($id = null) Чтение из реестра
|
|
*
|
|
* @package VK
|
|
* @author Арсен Мирзаев <red@hood.su>
|
|
*/
|
|
class Core
|
|
{
|
|
use Singleton, Registry {
|
|
Singleton::__construct insteadof Registry;
|
|
}
|
|
|
|
/**
|
|
* Количество роботов
|
|
*
|
|
* Хранит экземпляры роботов по их идентификаторам
|
|
*
|
|
* @var int
|
|
*/
|
|
public int $robots = 0;
|
|
|
|
/**
|
|
* Временная зона
|
|
*
|
|
* Используется в логировании
|
|
*
|
|
* @var string
|
|
*/
|
|
public string $timezone = 'Europe/Moscow';
|
|
|
|
/**
|
|
* Пути
|
|
*
|
|
* Архитектура проекта
|
|
*
|
|
* @var array
|
|
*/
|
|
public array $path = [
|
|
'root' => '',
|
|
'logs' => './logs',
|
|
'temp' => './temp'
|
|
];
|
|
|
|
/**
|
|
* Инициализация
|
|
*
|
|
* @see Singleton->__construct() Внимание на protected
|
|
*/
|
|
protected function __construct()
|
|
{
|
|
$this->path['root'] = $root = dirname(__DIR__);
|
|
$this->path['logs'] = $root . '/logs';
|
|
$this->path['temp'] = $root . '/temp';
|
|
}
|
|
|
|
/**
|
|
* Сборщик
|
|
*
|
|
* @return Builder
|
|
*/
|
|
public function build(): Builder
|
|
{
|
|
return new Builder($this);
|
|
}
|
|
|
|
/**
|
|
* Запись в реестр
|
|
*
|
|
* Модификация наследуемого метода
|
|
*
|
|
* @param mixed $id
|
|
* @param mixed $robot
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function set(int $id, RobotAbstract $robot): bool
|
|
{
|
|
if (empty(self::$registry[$id])) {
|
|
self::$registry[$id] = [];
|
|
}
|
|
|
|
array_push(self::$registry[$id], $robot);
|
|
|
|
return true;
|
|
}
|
|
}
|