This commit is contained in:
2021-08-19 18:10:15 +08:00
parent 619cf164a6
commit fedef53f93
+24 -20
View File
@@ -117,16 +117,7 @@ class ServerManager
*/ */
public function addProcess(string|CustomProcess $customProcess, $redirect_stdin_and_stdout = null, ?int $pipe_type = SOCK_DGRAM, bool $enable_coroutine = true) public function addProcess(string|CustomProcess $customProcess, $redirect_stdin_and_stdout = null, ?int $pipe_type = SOCK_DGRAM, bool $enable_coroutine = true)
{ {
$customProcess = $this->resolveProcess($customProcess); $process = $this->initProcess($customProcess, $redirect_stdin_and_stdout, $pipe_type, $enable_coroutine);
$process = new Process(function (Process $soloProcess) use ($customProcess) {
$system = sprintf('%s.process[%d]', Config::get('id', 'system-service'), $soloProcess->pid);
if (Kiri::getPlatform()->isLinux()) {
$soloProcess->name($system . '.' . $customProcess->getProcessName($soloProcess) . ' start.');
}
$customProcess->signListen($soloProcess);
echo sprintf("\033[36m[" . date('Y-m-d H:i:s') . "]\033[0m Process %s start.", $customProcess->getProcessName($soloProcess)) . PHP_EOL;
$customProcess->onHandler($soloProcess);
}, $redirect_stdin_and_stdout, $pipe_type, $enable_coroutine);
$this->server->addProcess($process); $this->server->addProcess($process);
Kiri::app()->addProcess($customProcess::class, $process); Kiri::app()->addProcess($customProcess::class, $process);
} }
@@ -134,18 +125,31 @@ class ServerManager
/** /**
* @param $customProcess * @param $customProcess
* @return mixed * @param $redirect_stdin_and_stdout
* @param $pipe_type
* @param $enable_coroutine
* @return Process
*/ */
private function resolveProcess($customProcess): CustomProcess private function initProcess($customProcess, $redirect_stdin_and_stdout, $pipe_type, $enable_coroutine): Process
{ {
if (is_string($customProcess)) { $server = $this->server;
$implements = class_implements($customProcess); return new Process(
if (!in_array(CustomProcess::class, $implements)) { function (Process $soloProcess) use ($customProcess, $server) {
trigger_error('custom process must implement ' . CustomProcess::class); if (is_string($customProcess)) {
} $customProcess = Kiri::createObject($customProcess, [$server]);
$customProcess = new $customProcess($this->server); }
} $system = sprintf('%s.process[%d]', Config::get('id', 'system-service'), $soloProcess->pid);
return $customProcess; if (Kiri::getPlatform()->isLinux()) {
$soloProcess->name($system . '.' . $customProcess->getProcessName($soloProcess) . ' start.');
}
$customProcess->signListen($soloProcess);
echo sprintf("\033[36m[" . date('Y-m-d H:i:s') . "]\033[0m Process %s start.", $customProcess->getProcessName($soloProcess)) . PHP_EOL;
$customProcess->onHandler($soloProcess);
},
$redirect_stdin_and_stdout,
$pipe_type,
$enable_coroutine
);
} }