This commit is contained in:
2021-12-01 16:09:49 +08:00
parent 97a5deda23
commit 955f358577
3 changed files with 84 additions and 39 deletions
+17 -6
View File
@@ -3,13 +3,15 @@
namespace Server; namespace Server;
use Note\Inject;
use Exception; use Exception;
use Http\Handler\Abstracts\HttpService; use Http\Handler\Abstracts\HttpService;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
use Kiri\Abstracts\Config; use Kiri\Abstracts\Config;
use Kiri\Events\EventDispatch; use Kiri\Events\EventDispatch;
use Kiri\Exception\ConfigException; use Kiri\Exception\ConfigException;
use Note\Inject;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Server\Events\OnShutdown; use Server\Events\OnShutdown;
@@ -41,6 +43,13 @@ class Server extends HttpService
public EventDispatch $eventDispatch; public EventDispatch $eventDispatch;
/**
* @var State
*/
#[Inject(State::class)]
public State $state;
/** /**
* *
*/ */
@@ -59,10 +68,11 @@ class Server extends HttpService
/** /**
* @return string start server * @return string
*
* start server
* @throws ConfigException * @throws ConfigException
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws \ReflectionException
* @throws Exception * @throws Exception
*/ */
public function start(): string public function start(): string
@@ -94,7 +104,7 @@ class Server extends HttpService
{ {
$configs = Config::get('server', [], true); $configs = Config::get('server', [], true);
foreach ($this->manager->sortService($configs['ports'] ?? []) as $config) { foreach ($this->manager->sortService($configs['ports'] ?? []) as $config) {
$this->manager->stopServer($config['port']); $this->state->exit($config['port']);
} }
$this->eventDispatch->dispatch(new OnShutdown()); $this->eventDispatch->dispatch(new OnShutdown());
} }
@@ -103,10 +113,11 @@ class Server extends HttpService
/** /**
* @return bool * @return bool
* @throws ConfigException * @throws ConfigException
* @throws Exception
*/ */
public function isRunner(): bool public function isRunner(): bool
{ {
return $this->manager->isRunner(); return $this->state->isRunner();
} }
+11 -33
View File
@@ -52,10 +52,21 @@ class ServerManager
public int $port = 0; public int $port = 0;
/**
* @var Logger
*/
#[Inject(Logger::class)] #[Inject(Logger::class)]
public Logger $logger; public Logger $logger;
/**
* @var State
*/
#[Inject(State::class)]
public State $state;
/** @var array<string,Port> */ /** @var array<string,Port> */
public array $ports = []; public array $ports = [];
@@ -149,23 +160,6 @@ class ServerManager
} }
/**
* @return bool
* @throws ConfigException
* @throws Exception
*/
public function isRunner(): bool
{
$configs = Config::get('server', [], true);
foreach ($this->sortService($configs['ports']) as $config) {
if (checkPortIsAlready($config['port'])) {
return true;
}
}
return false;
}
/** /**
* @param string|OnProcessInterface|BaseProcess $customProcess * @param string|OnProcessInterface|BaseProcess $customProcess
* @throws Exception * @throws Exception
@@ -315,22 +309,6 @@ class ServerManager
} }
/**
* @param int $port
* @throws Exception
*/
public function stopServer(int $port)
{
if (!($pid = checkPortIsAlready($port))) {
return;
}
while (checkPortIsAlready($port)) {
Process::kill($pid, SIGTERM);
usleep(300);
}
}
/** /**
* @param array $settings * @param array $settings
* @throws ContainerExceptionInterface * @throws ContainerExceptionInterface
+56
View File
@@ -0,0 +1,56 @@
<?php
namespace Server;
use Exception;
use Kiri\Abstracts\BaseObject;
use Kiri\Abstracts\Config;
use Swoole\Process;
class State extends BaseObject
{
use TraitServer;
public array $servers = [];
public function init()
{
$this->servers = Config::get('servers.ports');
}
/**
* @return bool
* @throws Exception
*/
public function isRunner(): bool
{
$ports = $this->sortService($this->servers);
foreach ($ports as $config) {
if (checkPortIsAlready($config['port'])) {
return true;
}
}
return false;
}
/**
* @param $port
* @throws Exception
*/
public function exit($port)
{
if (!($pid = checkPortIsAlready($port))) {
return;
}
while (checkPortIsAlready($port)) {
Process::kill($pid, SIGTERM);
usleep(300);
}
}
}