public function getInstance($appName, $instance = '', $spawn = true, $preload = false)
{
$class = ClassFinder::find($appName, 'Applications');
if (isset(Daemon::$appInstances[$class][$instance])) {
return Daemon::$appInstances[$class][$instance];
}
if (!$spawn) {
return false;
}
$fullname = $this->getAppFullName($appName, $instance);
if (!class_exists($class)) {
Daemon::$process->log(__METHOD__ . ': unable to find application class ' . json_encode($class) . '\'');
return false;
}
if (!is_subclass_of($class, '\\PHPDaemon\\Core\\AppInstance')) {
Daemon::$process->log(__METHOD__ . ': class ' . json_encode($class) . '\' found, but skipped as long as it is not subclass of \\PHPDaemon\\Core\\AppInstance');
return false;
}
$fullnameClass = $this->getAppFullName($class, $instance);
if ($fullname !== $fullnameClass && isset(Daemon::$config->{$fullname})) {
Daemon::$config->renameSection($fullname, $fullnameClass);
}
if (!$preload) {
/** @noinspection PhpUndefinedVariableInspection */
if (!$class::$runOnDemand) {
return false;
}
if (isset(Daemon::$config->{$fullnameClass}->limitinstances)) {
return false;
}
}
return new $class($instance);
}