vk/system/Core.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;
}
}