<?php
namespace cn\gz53\framework\application;
use cn\gz53\framework\core\Context;
use cn\gz53\framework\service\system\CoreService;
use cn\gz53\framework\service\system\EnvCheckService;
use cn\gz53\framework\service\system\LogService;
use cn\gz53\framework\service\system\RunnerService;
use cn\gz53\framework\service\server\ProcessPoolService;
use cn\gz53\framework\service\server\ProcessPoolWorkerService;
class WorkerApplication
{
private $context;
private $rootPath;
public static function start($root_path){
(new self())->run($root_path);
}
public function run($rootPath){
$this->setPath($rootPath);
$this->context();
$this->check();
$this->load();
$this->set();
$this->init();
$this->loop();
}
private function setPath($path){
$this->rootPath = $path;
}
private function context(){
$this->context = Context::instance();
}
private function check(){
$envCheckService = EnvCheckService::getInstance($this->context);
$envCheckService->checkRootPath($this->rootPath);
$envCheckService->checkAppPaths();
$envCheckService->checkDeploy();
}
private function load(){
$processPoolService = ProcessPoolService::getInstance($this->context);
$processWorkerService = ProcessPoolWorkerService::getInstance($this->context);
$logService = LogService::getInstance($this->context);
$logService->loadConfig();
$processPoolService->loadConfig();
$processWorkerService->loadConfig();
}
private function set(){
$runnerService = RunnerService::getInstance($this->context);
$processWorkerService = ProcessPoolWorkerService::getInstance($this->context);
$processPoolService = ProcessPoolService::getInstance($this->context);
$coreService = CoreService::getInstance($this->context);
$logService = LogService::getInstance($this->context);
$coreService->setCallback();
$logService->setConfig();
$logService->setCallback();
$runnerService->setPath();
$runnerService->setLoad();
$processWorkerService->setConfig();
$processWorkerService->setRunner();
$processPoolService->setConfig();
$processPoolService->setWorker();
}
private function init(){
$processPoolService = ProcessPoolService::getInstance($this->context);
$processPoolService->init();
}
private function loop(){
$processPoolService = ProcessPoolService::getInstance($this->context);
$processPoolService->loop();
}
}